Current release · 0.18.2

Your AI assistant for Upwork and LinkedIn.

Score opportunities and draft tailored proposals on Upwork. Start controlled LinkedIn runs for Easy Apply and external employer websites—all with the AI access you already use.

Upwork: you submit LinkedIn: auto-submit is optional AI credentials stay on your device
Apply with AI workspace · fictional preview
Application workspaceTwo platforms, one clear view
Example data
Upwork

Landing page refresh

4 / 5 fit

Verified payment, a matching budget, and strong profile evidence.

Qualified Draft filled
Review and edit the proposalYou press Submit
in
LinkedIn run

Product designer roles

6 of 10
5 applied1 needs review0 failed
Easy Apply External sites Pause anytime
You started this runAuto-submit optional
Control follows the platformUpwork stays manual. LinkedIn auto-submit can be turned off.
Upwork + LinkedInTwo focused job workflows
Submission controlManual or optional auto-submit
Your AI accessCredentials stay in your browser
Two installationsUse it on two Chrome profiles
One extension, two workflows

Use the right level of help on each platform.

Upwork stays review-first and manually submitted. LinkedIn runs work through the jobs you choose, with auto-submit you can turn off.

Upwork workflow

Find the fit. Shape the proposal.

  1. 01
    Score and qualify

    Compare job scores, saved filters, and AI qualification against your profile.

  2. 02
    Draft and fill

    Generate a tailored proposal or reply and place it into the right fields.

  3. 03
    Review and submit

    Check every claim, edit the words, and press Upwork’s Send or Submit button.

Read the Upwork workflow guide
LinkedIn workflow

Set the search. Start the run.

  1. 01
    Choose the jobs

    Set your search, filters, application type, and target number of roles.

  2. 02
    Let the agent work

    It handles Easy Apply and supported external employer forms with your saved answers.

  3. 03
    Stay in command

    Pause, skip, or quit anytime. Turn auto-submit off when you want final review.

Explore the LinkedIn job agent
Features in 0.18.2

Everything in the current release.

Explore Upwork drafting and job selection, LinkedIn application runs, and the AI tools shared across both workflows. Submission controls depend on the platform.

See what’s new in this release
11 features

Proposals on job pages and proposal forms

Since 0.6

Apply with AI button

on job posts and on the "Submit a Proposal" form, including invitation forms. One click reads the full post (expanding truncated descriptions), your imported profile and your standing instructions, then drafts the cover letter, the screening answers and the dropdown choices and fills them into the form for review. It never submits.

Since 0.6

Writer that follows the client's brief

answers in the client's own order and vocabulary, states a concrete plan, includes one proof sentence when the post asks for expertise, and keeps letters at proposal length. Length, tone and sign-off follow your settings.

Since 0.6

Required words

when a post asks for a code word or phrase, it is placed on the first line, verified after drafting, and kept out of the screening answers. Only words the client actually wrote in the post count.

Since 0.6

Notes for this job

type a few words into the cover-letter box before clicking and they steer the draft (a price to quote, a point to make, a tool the client uses).

Since 0.6

Review pass

a second model call checks every draft against a checklist (instructions followed, deliverables mapped, no invented facts, no filler) and rewrites it when it fails.

Since 0.6

Profile highlights

picks up to four of your portfolio items, past Upwork jobs and certificates that match the post and attaches them to the proposal.

Since 0.6.2

Never confess a gap

when a post asks for something outside your facts, the letter says the closest true thing and leads with the plan; it never invents experience and never apologises for a gap.

Since 0.4

Client research

(Claude providers): identifies the client's company from the post, confirms it, and folds one or two sourced facts into the letter when they change the plan.

Since 0.4

Live DNS check

any domain named in the post is checked (SPF lookup count, DMARC policy, DKIM selectors, mail host) and the finding can be quoted in the letter.

Since 0.6

No repeated openers

the writer sees the sentences used in your last proposals and a past proposal that got a reply, and avoids repeating itself.

Since 0.7.0

Copy-only fallback

if page insertion is unavailable, the draft is shown for copying instead of being inserted.

2 features

Replies in Upwork Messages

Since 0.5.0

Reply with AI

in any conversation: reads the whole thread and the proposal behind it, then either suggests the best next message or writes what you tell it to say.

Since 0.6.0

Draft, revise, repeat

the draft is placed in the message box; a panel takes change requests ("shorter", "propose Tuesday instead") and regenerates. Sending is always done by you with Upwork's own send button.

7 features

Job lists: scores, filters and AI qualification

Since 0.9.0

Score on every job card

(search results, Best Matches, Most Recent): a 1–5 badge computed from client quality (payment verified, money spent, rating), budget fit against your profile rate, keyword hits, competition (proposals already sent) and freshness, with a short "why" beside it.

Since 0.9.0

Saved job filters

include and exclude keywords (title, description, skills; any or all), hourly and fixed-price ranges, hide jobs without a budget, experience level, payment verified, minimum client spend and rating, client countries to include or exclude, a cap on proposals already sent, posted-within hours, and a minimum score. Cards that fail can be shown as usual, dimmed or hidden; the failing rule is shown on the card.

Since 0.9.0

Open jobs

a filter runs as an Upwork search with its keywords and rules applied, so the results page arrives already scored and ranked.

Since 0.9.0

Job scores panel

docked to the page: pick the filter, set the minimum score, see the page's jobs newest first (or best first), switch between All, Qualified and Worth-it views, and see which rules are failing most.

Since 0.9.0

Qualify with AI

one job or the top five at once are judged against your facts and profile. Each gets Qualified, Maybe or Skip, a fit score, two concrete reasons and a "worth a proposal" mark; results are remembered per job.

Since 0.9.0

Adjustable score weights

in Settings → Jobs.

Since 0.13.0

Self-healing page reading

when Upwork or LinkedIn change their pages, the extension keeps reading them. It first finds the job cards by the page's structure; if a page still shows jobs it cannot read, it asks your own AI once for a new way to read that page, tests the answer on the live page and keeps it only if it works. Covers Upwork's job lists (search, Best Matches, Most Recent), the Upwork job panel, LinkedIn's job search, LinkedIn conversations, LinkedIn people search results, LinkedIn profiles, and from 0.13.0 also LinkedIn posts and their comment boxes (Comment with AI, Post with AI), the home feed's post cards and their Like, Comment, Repost and Attend buttons (engagement campaign) and the people list in an event's invite window. Settings → Page reading shows what each page uses, with a switch for the AI repair and "Forget learned rules".

56 features

LinkedIn job agent (Easy Apply and external websites)

Since 0.18.1

Holds for you when the AI connection is dead

when Claude's or ChatGPT's session was revoked, the key is wrong or your access ended, the run says the AI needs reconnecting and waits, charging no job for it, and carries on by itself the moment the provider is connected again in Settings (or on Try now, or after half an hour). A real outage or rate limit is waited out with waits that grow across jobs.

Since 0.10.0

Upwork / LinkedIn switch

in the toolbar popup: two side-by-side buttons. Upwork opens first unless you make LinkedIn the default (one click in the popup, or Settings → LinkedIn).

Since 0.10.0

Start a LinkedIn run from the popup

type a job title or describe the role in your own words (LinkedIn's AI job search understands descriptions), add a location, pick On-site / Remote / Hybrid, date posted, experience level, job type and sort order, set a target number of jobs, and press Start. LinkedIn opens on that search with the Easy Apply filter already on.

Since 0.10.0

Works on both LinkedIn job searches

the classic job search and the new AI-powered job search, plus Recommended / Collections pages and single job pages.

Since 0.10.0

Easy Apply agent panel

docked to the LinkedIn page: scans every job on the results page, marks which are Easy Apply and which you already applied to, and lets you tick the ones to apply to. "Apply to N selected" starts; the panel shows Job i of N, the current job and step, applied / skipped / failed counts, a speed control (1x to 3x) and Pause, Skip and Quit buttons, like a human assistant working through the list.

Since 0.10.0

Applies and moves on by itself

opens each job, presses Easy Apply, picks your resume by name, fills every step of the form, presses Submit, closes the confirmation and continues to the next job; when the page is done it turns to the next results page until the target is reached. Jobs applied to earlier are never repeated.

Since 0.10.0

Your answers first, the model second

phone, email, city, years of experience (overall and per skill), salary, notice period, work authorization, visa sponsorship, relocation, on-site and remote preferences, education, languages and a standard message are saved once under Settings → LinkedIn and used on every form. Your own rules ("when the question contains X, answer Y") come next. Only questions none of that covers go to your chosen AI provider, which answers from your Facts Bank and profile; every AI or hand-typed answer is remembered and reused, and you can edit or delete remembered answers at any time.

Since 0.10.0

Pause when unsure, never guess silently

an AI answer it is not confident about is filled in and shown for a quick check; a question nobody can answer pauses the run on that job so you answer in LinkedIn's own form and press Continue (or choose "skip the job" behaviour instead). If nobody answers within a few minutes, the run moves on by itself.

Since 0.10.0

Submit by hand if you prefer

auto-submit is on by default and can be turned off per run or in settings; the agent then stops on the review step for you to press Submit, and continues once you have.

Since 0.10.0

Results screen

when a run finishes or is stopped, a results tab opens with the status, jobs applied out of the target, the success rate and the per-job outcomes, and a form to start the next search.

Since 0.10.0

LinkedIn application history

with the answers given on each form, exportable as JSON.

Since 0.11.0

External-website applications ("Apply" jobs)

jobs that send you to the employer's own careers site are applied to as well, in the same run. The agent follows LinkedIn's Apply link into a tab of its own, reads the page, fills the form from your saved answers and the Facts Bank (phone widgets with a country picker get your country chosen first, then the national number), uploads the resume you keep in Settings → LinkedIn → External websites, writes a short cover letter when a box asks for one, ticks the required consents (also the ones drawn as a styled box over a hidden checkbox, and required declarations), and submits. It works its way through multi-step forms, forms embedded in a frame from another site (Jobvite, Talemetry, Greenhouse) and job pages that need an "Apply" press first, signs in or creates an account with the email and password kept in settings when a careers portal insists on one, and stops for you (with a Continue button on the site and in the panel) when a CAPTCHA, an email verification or an unknown login is in the way. One approval covers every site; each site gets a time budget (6 minutes by default, counted from the last time the page moved on, three budgets at most) and is marked failed with the reason if it cannot be finished. When a page stops moving, the agent asks the AI for a different way with the page facts (what is scrolled, covered, disabled, empty, and the messages shown) and a wider set of moves (a press by mouse, keyboard or script, a scroll, a key, closing what covers the page, a step back); on the round after that it shows the AI a picture of the tab (Claude and ChatGPT; taken only then, never kept) so icons, steppers, widgets and overlays the outline cannot carry are seen; a job is given up only after five unchanged rounds, and the way that worked is kept in the site's notes. A three-way choice in the popup, the panel and settings — Easy Apply only (the default), External websites only or All jobs — decides which jobs a run applies to; choosing external websites on a filtered results page reloads it without LinkedIn's Easy Apply filter so those jobs are listed, and choosing it while the run waits for LinkedIn's daily limit continues at once with the external-website jobs. The panel explains, with a button to Settings, when the one-time website access has not been granted yet. With "All jobs", LinkedIn's daily Easy Apply limit does not stop the external-website jobs: they continue, and the Easy Apply ones wait for tomorrow. With auto-submit off, the agent fills everything and waits for you before the final Submit on the site too.

Since 0.14.9

Workday forms keep what was chosen

an entry Workday has already taken in one of its search boxes ("Sweden (+46)" under Country Phone Code, "LinkedIn" under How did you hear about us?) is read as the field's value, so it is not chosen again every round; the phone number goes into the Phone Number box alone, never into the code box beside it.

Since 0.14.9

Fields are left the way a person leaves them

on company sites every typed field and every chosen pick list is left for real once filled, and the field being edited is left before a button is pressed, so sites that check or save a field when you leave it (Workday among them) take the value instead of calling it empty after Save; a phone box with its own country picker keeps your country whatever digits it reformats; buttons are named by their own words; the second address line and a referrer's email box are left to the AI; and a page bouncing between two states, or reloading after a press, is recognised as standing still rather than repeated.

Since 0.11.0

External-website outcomes in the same places

the panel shows "External website: <step>" while it works, the popup and settings show the step and any question the site has for you, the history marks these applications as external-website ones with a link to the application page, and the site's tabs close when the application ends.

Since 0.11.0

Human pace

every wait is random so no two applications take the same time, there is always a pause of several seconds before Submit and between jobs, and after a handful of applications the agent takes a longer break. 3x is the pace of 0.10.0; 1x, the default, waits about two and a half times longer.

Since 0.13.7

LinkedIn's daily limit is respected

when LinkedIn answers "Save this job and apply tomorrow", Easy Apply waits 24 hours and then continues by itself (the LinkedIn tab is reopened if it was closed), with a "Try now" button if you want to check earlier. Meanwhile jobs that apply on company websites keep the run going when website access is allowed. The limit is never guessed from a stuck page: when Easy Apply forms stop opening, the results are loaded afresh and those jobs get another go first.

Since 0.11.0

Answers prefilled on first use

the first time the LinkedIn answers form opens, blank fields are filled from what the extension already knows — the imported Upwork profile and the Facts Bank (name, email, phone, LinkedIn URL, website, city and country, years of experience, education, languages) — and marked as prefilled until you check and save them.

Since 0.11.0

Panel on the right

the agent panel docks to the right edge of LinkedIn's page, next to the job details, and its pop-ups ("Your application was sent", "Update profile") are closed with "Not now" so the next job proceeds.

Since 0.13.1

Keeps going until your target

a run does not stop halfway. When LinkedIn's daily Easy Apply limit is reached, an "All jobs" run carries on with jobs that apply on company websites until Easy Apply is available again; an "Easy Apply only" run asks you first (Yes, company websites / No, wait for Easy Apply) and goes on with company-website jobs by itself if you do not answer within a minute, so your choice of jobs is respected and an unattended run still keeps applying. A failed job is recorded and the run moves on to the next; a streak of failures leads to a quick recovery (pop-ups closed, page read again or reloaded), not a stop. If your AI can't be reached, nothing is sent and the job is tried again after a short wait. When every job in the results is done, it looks for new jobs every 20 minutes. Jobs that failed twice recently are not ticked again automatically.

Since 0.11.4

Your AI fixes stuck steps

when an Easy Apply step will not move on (a field the agent does not recognise, a message that keeps coming back, a button in another language), the form is shown to your AI, which fills what is missing and presses the button that moves on. It never presses Submit or anything that leaves the form, and its answers are remembered once LinkedIn accepts the application, so the same question is answered without the AI next time.

Since 0.11.4

Learns each careers site

on employers' websites the agent keeps notes per site (and per hiring platform, such as Workday or Greenhouse): the route that worked and the last thing that failed, used on the next application there. It asks your AI again after a hiccup before giving up, and changes approach when a page does not react.

Since 0.11.4

Follows the application anywhere

when an employer's Apply button opens the form in a new tab or window, or a chain of them, the agent carries on there; sign-in windows are left to the site and a tab that closes leads back to the one before. When the application ends, sent or not, every tab it opened is closed (a switch in Settings → LinkedIn → External websites), and the outcome with its reason stays in the results.

Since 0.11.4

Cookie banners answered

on employers' websites the cookie or consent banner is accepted first, in any frame, so the form behind it (or one that loads only after consent) can be filled.

Since 0.11.4

Creates portal accounts by itself

when a careers site wants an account and no portal password is set, the agent makes a strong one, creates the account and keeps the password in Settings → LinkedIn → External websites so you can sign in later. Your AI only ever sees a placeholder; the extension types the real password, and passwords are never saved with an application's answers.

Since 0.11.5

Completes registration forms

on careers sites that want an account first, the agent fills the whole form, including styled dropdowns such as a country list, ticks the terms, privacy and data-notice boxes (never newsletter, job-alert or talent-pool ones), answers "How did you hear about this job" with LinkedIn, and presses Register (or the form's Save or Continue) once nothing required is empty.

Since 0.17.1

Questions for you, answered from the website

the Control page on applywithai.app lists the questions waiting and takes the answer right there (a text box, or the question’s own choices); it goes straight to the extension, which remembers it for every later form and lets a run that is going try the jobs that waited. The answer is never kept by the website, never cached and never sent anywhere but the extension; every waiting question is reachable, 25 a page.

Since 0.14.0

Questions for you

when a form asks something only you know and nothing saved answers it (a date of birth, a driving licence, a certificate), the agent never guesses and never stops the run: the question waits in Settings → LinkedIn → Questions for you (the toolbar icon shows how many), the job is set aside, and the run goes on. Answer once and every later form, Easy Apply and company sites alike, uses the answer; the jobs that waited are tried again. Whatever plainly follows from your facts is derived rather than asked: today's date, a start date from your notice period, a salary converted to the currency and period asked, salary expectations, conflict-of-interest and planned-leave declarations, a location you are outside of, a language you do not list, years with a tool or industry.

Since 0.11.5

Driving licence

say once whether you hold one and which categories (such as B); licence questions on every form are answered from it.

Since 0.11.5

PDF version of your resume

forms that take only PDF get a PDF, made by itself from your Word resume (real text, simple layout) or uploaded by you, with a download to check it; a site that turns a Word file down gets the PDF instead.

Since 0.11.5

Never stuck waiting

every "Needs you" moment on a company website (a CAPTCHA, an emailed code, a sign-in) ends by itself after a few minutes; the job is skipped and the run continues towards your target. Sign-in pages with a way to register ("Create a candidate profile") are registered on, and fields meant as bot traps are left alone.

Since 0.18.1

Shorter waits when nobody is there

a "Needs you" moment on a company site waits three minutes for you; once two in a row in a run went by with nobody pressing anything, the next ones wait one minute, so an unattended run loses less time to sites it cannot get through. The card on the site, the LinkedIn panel and the popup say which wait applies, and your first press on Continue, Pause, Skip or Stop puts the waits back to three minutes. The hand-over before Submit with auto-submit off always keeps its full time.

Since 0.14.8

AI CAPTCHA assistance

on company sites the agent attempts the verification checkbox and Google's supported 3×3 or 4×4 image grids using your existing vision-capable Claude or ChatGPT connection. It sends only the puzzle image and instruction, rechecks replacement tiles, and continues only after a fresh verification response. Stops, uncertain answers, blocks and unsupported challenges are handed back to you rather than retried indefinitely.

Since 0.14.8

Documents on company sites

file fields carry their section's heading and words, documents/attachments fields take the resume, uploads are checked against what the site shows (PDF fallback, refusals named), and a stuck page gets the resume attached before another way is tried.

Since 0.14.9

Apply with AI mailbox

your own `@ailavo.com` address on every application, Easy Apply and company sites (company sites since 0.14.8); the agent reads verification codes and links from it and continues by itself. "Email on applications" in Settings → LinkedIn → Company sites chooses the mailbox (default) or your own email; Easy Apply offers the mailbox once it is added to the LinkedIn account's verified addresses.

Since 0.11.5

Works in its own Chrome window

company websites open in the same window as the LinkedIn tab, so a run keeps going there while you use another Chrome window.

Since 0.14.9

Keeps going on a locked or busy computer

a LinkedIn job run's waits are timed by the extension's background rather than by the tab, so Chrome slowing a hidden tab's timers does not slow the run; the run's tab is kept from being discarded by the memory saver; and a watchdog reloads a page whose run has gone quiet, which carries on from where it was. As long as the computer is on, the run continues. (0.14.3) Since 0.14.4 the same holds for every page the extension works on: company-site applications, all LinkedIn campaigns and Upwork forms. (0.14.4) A run whose tab LinkedIn signed out (it landed on LinkedIn's public site) pauses with a note for you instead of being sent back again and again.

Since 0.11.4

Resumes by itself after LinkedIn's daily limit

the wait ends on its own even if Chrome was restarted, the extension updated or the computer slept through the time, and the LinkedIn tab is reopened if it was closed.

Since 0.17.4

Workday "How did you hear about us?" chosen for real

an entry sorted under a heading in Workday's search results (LinkedIn under Social Media) is chosen from the opened entries, and a pick counts as chosen only once Workday shows it beside the box; otherwise the agent is told what the list offers instead of the form stalling at Save on a field it believed filled.

Since 0.17.4

Resume attached once to a stuck page

when a page stops moving, the resume goes into an empty file field once per field and never when the page already shows the file (sites that list uploads apart from the drop zone, such as Oracle Recruiting), so an application no longer carries the same file five times over.

Since 0.14.9

Workday Yes/No questions answered

Workday's hidden radios ("Have you worked here before?", "Previously employed by…") are read whole, so No can be chosen and the form moves on; radio questions on other sites that only have a generated name get their real question from the words around them.

Since 0.14.9

Drop-down buttons chosen from

Workday's "Select One" style buttons open a list the agent now reads and picks from; when its guess is not in the list, the options the list offers are reported and the right one is chosen next. Job links on a careers search page and forms inside a frame of any container are read too.

Since 0.18.1

iCIMS applications and multi-step plans run through

iCIMS careers portals, which draw the sign-in, the form and the questions in a frame of their own site, are worked inside that frame step after step; and on every company site a plan such as "open the list, type, choose, Save and Continue" is carried out to its button, where a click that merely opened something used to end the turn.

Since 0.18.1

Apply links in more languages

on company job pages the agent finds the apply control when it says "Solliciteer direct", "Jetzt bewerben", "Postuler" or "Candidati", when only its address says apply, or when its words are drawn beside an empty link laid over a styled button, instead of reporting a page with no apply button.

Since 0.18.1

Enter chooses, never submits, in a pick list

pressing Enter in a search box with suggestions (Oracle Recruiting's Country, Workday's prompts) picks from the list and never sends the page's form the plain way, which used to land some sites on a server error page and lose the application.

Since 0.18.1

Wrong fields named on a stuck form

when a site says "Please correct the errors below", the agent is told which fields the site marked as wrong and what they hold, even when they sit in a collapsed section, so the fix goes to the right field.

Since 0.18.1

Multi-page portals keep their time

on a company site the "Give up after" minutes count from the last time the page moved on, and a new page now counts as moving on, so a portal that takes you through eligibility, sign-in, account, form and upload as separate pages (iTrent) is no longer cut off as "standing still" while it is going forward.

New in 0.18.2

A form that comes back empty is not filled again and again

when a company site's form is filled, saved and comes back exactly as it was (the same step, the same empty fields, the same words), the agent treats it as a page that did not move rather than as progress, tells the AI the site kept nothing and asks for another way, and gives the job up after its rescue rounds instead of repeating the lap for twenty minutes; a site that keeps each entry is unaffected.

Since 0.18.1

Emailed codes typed into every box

verification-code boxes named "digit 1 of six" (Oracle Recruiting) are counted like one-character boxes, a code drawn one character per cell in the email is read as one, and a number of the wrong length (a job number) is never taken for the code; the form's own required CV field is fed even when a resume parser on the page already holds the file; and a Hebrew "we will be in touch shortly" after sending the CV is read as the confirmation it is.

Since 0.14.9

Phone codes picked by country

a country or phone-code list that does not know "+46" is searched for your country's name instead, and when the form has a separate code field the phone number box gets the national digits the site accepts.

Since 0.14.9

Suggestion lists and country pickers read whole

on company sites a city box's suggestions (Google's place list on SmartRecruiters), a country picker that draws only part of its list (Recruitee's phone code), and search boxes whose list offers other things are all read and chosen from; when nothing matches, the agent is told what the list offers and picks from that. SuccessFactors boxes that suggest only entries starting with the typed words ("How did you hear about us?") are opened by their own arrow and chosen from the whole list.

Since 0.14.9

Same-named buttons told apart

when a company-site form has several buttons saying the same thing (an "OK" under every question, as on Typeform), each is named by the question before it, so the agent presses the one that belongs to what it just filled.

Since 0.14.9

Email-only applications recognised

an "Apply now" that is only an email address is reported as such straight away, instead of being pressed again and again.

Since 0.14.9

A dropped resume is attached again

when a company site empties the resume field after an upload and asks for the CV again, the agent attaches it once more instead of insisting it is already there.

Since 0.14.9

A run page that cannot answer is not reloaded forever

a LinkedIn tab sent to sign in pauses the run with a note for you, a tab that left the jobs pages is sent back to your search, and after three fresh loads without an answer the run waits an hour before trying again.

Since 0.14.8

Closed postings and slow panes are not failures

a job LinkedIn says is no longer accepting applications is skipped with that reason; a pane slow to show its apply button is waited for and opened again, then tried once more later before anything is recorded. Company-site applications are cut off only when they stand still for the "Give up after" minutes, not for being long, and the record says which it was.

24 features

LinkedIn messages and connections

Since 0.11.6

Reply with AI in LinkedIn Messaging

on the Messaging page and in LinkedIn's chat windows, a Reply with AI button just left of LinkedIn's Send button reads the whole conversation and suggests the next message, or writes the one you describe, in the conversation's language, from your facts, saved answers, resume and the jobs you applied to at their company. The draft goes into LinkedIn's message box; you read it, ask for changes or discard it, and press Send yourself.

Since 0.13.3

Comment with AI under any post

a small AI button in the icon row of every comment box on LinkedIn (the feed, a post's own page, your profile's and your pages' posts, anyone else's posts, and the Reply box under a comment). Pick a tone from eight (💼 Professional, 🙂 Friendly, 😄 Funny, 😏 Witty, 🙌 Supportive, 💡 Insightful, ❓ Curious, 🎉 Congratulate), add a note if you like, and your AI reads the whole post, its author and the comments already there (and the comment you are answering) and drafts one comment in that tone into the box. Ask for changes or regenerate; nothing is posted until you press LinkedIn's Comment or Reply. Written from your own LinkedIn perspective: the extension reads your profile (headline, About, Experience) and writes as the person it shows, in your field, never as an Upwork pitch.

Since 0.13.2

Post with AI

the same button in LinkedIn's share box, posting as yourself or as one of your pages. Give it a topic, notes, or paste an article or a link with its text, pick a tone, and your AI writes the post in your voice from your profile and Facts Bank into the box. You read it, change it, and press Post yourself. Written from your own LinkedIn perspective: the extension reads your profile (headline, About, Experience) and writes as the person it shows, in your field, never as an Upwork pitch.

Since 0.14.0

Engagement campaign

a day's numbers of comments, reactions, reposts and event attendances from your home feed (recommended 30, 100 and 50; each with its own switch and number), in a tone you pick, with a blocklist of people, companies or "people from <company>" (a company on the list also keeps the campaign off posts about it, whoever wrote them) it never touches. It opens your feed in a small LinkedIn window of its own and works through it a few posts at a time with pauses like a person reading: ads, your own posts, posts already engaged with and anyone on the blocklist are passed by, your AI passes by anything it should not touch (politics, illness, sales, job posts, polls, engagement bait) and decides per post which reaction fits, writes one comment worth reading, and the line to repost with; only what LinkedIn shows as done is counted. When the day's numbers are done it stops and starts again about 24 hours after it began; it never runs at the same time as a connection, message or event campaign. Replies to your comments are answered too: the campaign looks back at each post it commented on over the following days (its page is known even on the new feed, where LinkedIn keeps the post's identity out of the page) and gives every reply a fitting reaction and an answer in the thread, never twice; "Check replies now" looks right away. An action LinkedIn refuses for now ("could not be created at this time", a limit) is held for a day while the other actions go on, and tried again by itself after.

Since 0.14.6

Catch up

part of the engagement campaign, on by default. Once a day the extension opens LinkedIn's Catch up page and sends every connection with a new role, a birthday, a work anniversary or a graduation a short note written for them in the campaign's tone, through LinkedIn's own Message button in place of its canned line, and reacts to the post behind the card. One note per person per occasion, up to 10 a day within the messages' daily number; a draft of your own in the box is never touched.

Since 0.14.7

Posting campaigns

two kinds, in Settings → LinkedIn. *My topics*: subjects one per line, a day's number, a tone; each post takes the least recently used topic and makes one point from your own seat (40–120 words, a first line that stops the scroll, a reason to react, never a pitch) with a picture — generated with OpenAI's image model when an OpenAI API key is on hand (under Provider, or pasted for pictures; the ChatGPT sign-in covers chat only), else a drawn card with the post's first line. *Watched profiles*: paste LinkedIn or X profile links and an interval, a `*` in front of the ones whose new posts come first; when more is found than the day allows, the AI scores the candidates for likely reaction and the best go first; a new post of theirs becomes a post of yours ("Tibo just posted this on X…") with your take (news, your angle, support, critique, friendly, in turn) and a screenshot of the original attached, taken from the watcher's own window; ads, politics, illness and personal matters passed by. Both run in a small window of their own between 07:00 and 22:00, spread over the day, never alongside another LinkedIn step, paused a day on LinkedIn's refusal; every post listed under the campaign. X needs your permission for x.com (asked once) and your X sign-in in this Chrome. Comments under the campaign's posts get a reaction and an answer in the post's context, once each, for two weeks (on by default). A quick post takes one pasted profile's latest post right away; "review first" on any of these leaves each post in LinkedIn's share box for you, with a notification and a list in Settings, instead of posting it. Campaigns are edited in place.

Since 0.16.2

Auto-reply: Remove

the auto-reply card has a Remove button (the campaign and its lists go; replies already sent stay sent), beside "Clear this list" which only empties the threads left for you. A running posting campaign can be removed too; its tab closes.

Since 0.14.9

Auto-reply

every few hours (your interval) the unread conversations where the other person wrote last are answered for you in your voice, one to three sentences in their language, with no promises, times or prices, from your profile, Facts Bank and your standing notes. What you tick is always left for you — money, offers and contracts; commitments and scheduling; negative or sensitive; a recruiter about a job — and so is anything the AI is unsure of, listed with the reason and a link. One answer per message of theirs, at most your number a day; your own draft in a box is never touched. (0.14.7) Conversations are opened the way you open them (the row pressed, the named person's conversation read, LinkedIn's renamed layouts learned), and one that will not open is left until the next check or until they write again, never retried all night.

Since 0.11.6

Connection campaigns

paste a LinkedIn people search, a Sales Navigator people search or one of its lead lists (0.14.9: each lead's public profile is read from its lead page, then everything else runs on LinkedIn as usual; the campaign's background tab gets Sales Navigator to draw its results), or just describe who you want to meet (such as "CEO USA"): your AI turns the words into a search and keeps only the people who fit. For each person the extension reads their profile and sends a connection invitation with a short personal note written for them.

Since 0.15.4

Change a running campaign

its invitations a day, the personal-note switch and the note itself, the purpose and the follow-up messages can all be changed while it runs; a changed note applies from the next invitation.

Since 0.16.1

Several connection campaigns at once

start another campaign without replacing the one running; each has its own source, note, purpose, follow-ups, invitations a day and its own Pause, Stop, Remove and Duplicate. They share one background tab and one pace: invitations go out one at a time, 4 to 14 minutes apart whichever campaign sends, the campaigns take turns, and a person already in one campaign is not invited by another. LinkedIn's limits are per account, so the card shows the invitations a day of all running campaigns together, warns above 20, and LinkedIn's invitation limit pauses every campaign for the day. Up to 10 campaigns; the campaign running before the update carries on as the first of the list. The website's Control page shows each campaign as its own card.

Since 0.14.9

Duplicate a campaign

the campaign card's Duplicate button fills the form with the campaign's source, numbers, note and messages, to change and start as a new one.

Since 0.11.6

Safe daily pace, every day on its own

It starts the moment you press Start, at any hour. 20 invitations a day by default, 4 to 14 minutes apart, with a clear caution before you choose more; each day's batch begins about 24 hours after the last one. The campaign carries on by itself, in a background tab, until the list is done; people already connected or already invited are skipped.

Since 0.14.0

Follow-up messages after an invitation is accepted

add one or more messages to a campaign, each a set number of hours or days after the one before, written with placeholders such as {{first_name}} and {{company}} (with fallbacks). Your AI rewrites each for the person, keeping your meaning and links, and anyone who replies gets nothing more. (0.11.8) The messages sit inside the campaign's own box on the Connect page, each with its delay and how many people are waiting, with an Edit messages button.

Since 0.11.8

Messaging campaigns to your connections

message your own connections, all of them, a described group or a pasted LinkedIn search, in one or several steps with delays, a set number a day, stopping for anyone who replies.

Since 0.11.8

Your own invitation note

write the note once with placeholders; your AI fits it to each person within LinkedIn's limit.

Since 0.12.2

LinkedIn event invitations

paste the address of an event you organize or attend (wherever LinkedIn offers Invite, as a button or under the event's Share button) and invite all your connections, or only the ones who fit your description ("people in Sweden", "founders in Stockholm"): your AI turns the description into the invite window's own filters (Locations, Current company, School, Industry), LinkedIn narrows the list, and your AI checks on each headline whatever the filters cannot say; if LinkedIn does not take a filter, nobody is invited on that pass. Batches of up to 25 run in a tab of your own browser window and hand the window back when done, 100 a day by default (your number), people already invited are passed by, a 24-hour pause on LinkedIn's limit, and a clear notice when the event has ended or LinkedIn offers no Invite on it.

Since 0.11.9

Follow-up after an event invitation

optional messages with delays and the placeholders {{event_name}}, {{event_date}} and {{event_link}}; your AI rewrites each, and anyone who replies gets nothing more.

Since 0.18.0

Far fewer profile pages

LinkedIn warns about "unusual activity" when an account loads many profile pages, so the extension now opens as few as it can while doing the same work. A connection campaign invites each person from their card on the search results page (LinkedIn's invitation window opens right there) and writes the note from what the card shows, so no profile page is loaded for an invitation; "Read each profile first" is a per-campaign choice for a deeper note. Withdrawals go through LinkedIn's Sent invitations page and visit a profile only when the list does not show the person. Messages reuse a person's Message route once it is known. What a profile said is remembered for a month, so nobody is read twice. One budget for the account, "Profile pages a day" in Settings → LinkedIn and on the website's Control page (40 by default; today and this week are shown): every step that opens a profile page counts against it and waits for tomorrow when it is used up. Invitations go 8 to 20 minutes apart and at most 50 a day per campaign; withdrawals at most 20 a day.

Since 0.11.6

Withdraws unanswered invitations

on by default, an invitation a campaign sent that is still pending after 20 days (your choice, 7 to 180) is withdrawn by itself, on the person's profile or LinkedIn's Sent invitations page, one at a time and at most 40 a day. Invitations you sent yourself are never touched; switch it off in Settings → LinkedIn.

Since 0.14.7

Keeps the computer awake while working

on by default; while a run, an application or a campaign is working or due within a quarter of an hour, the system is kept from sleeping (the screen may dim). Chrome's power permission is asked for at the first start, shown in Settings → LinkedIn with a button to ask again.

Since 0.13.6

Keeps going after a slow access check

when your access can't be verified for a moment (the licensing service is slow or unreachable), a campaign sends nothing, checks again by itself a few minutes later and carries on once access is verified, instead of stopping until you press Resume. The safety policy the service confirmed within the last ten minutes keeps serving through a slow or dropped request, so one blip never turns a working Upwork page into "unavailable".

Since 0.14.9

Invitations counted by what LinkedIn shows

the campaign answers only LinkedIn's own invitation window, never a tray or promo that happens to be open on the profile; an invitation the profile shows as pending is recorded as sent even when LinkedIn leaves a follow-up window open, and a window that does stay is closed with the reason noted.

Since 0.11.6

Pauses on LinkedIn's limit

when LinkedIn says the invitation limit is reached, the campaign stops at once, waits 24 hours and resumes by itself, even if Chrome was restarted. When LinkedIn stops personal notes on a free account, invitations go without one until the next month.

3 features

Profile, history and outcomes

Since 0.6

Import profile

from your Upwork profile page: title, overview, skills, rate and work history feed every draft.

Since 0.6

History

of every application drafted, with the letter and answers, and a sync of outcomes (submitted, interviewing, hired, archived) from your proposals page. Syncing runs when you click, never automatically.

Since 0.6

Win-rate summary

in the toolbar popup.

6 features

AI providers and models

Since 0.8.0

Bring your own AI

Claude (claude.ai subscription sign-in), ChatGPT (ChatGPT subscription sign-in), Claude API key, OpenRouter (including its free tier and the openrouter/free router), OpenCode Zen (with free models), any OpenAI-compatible endpoint (Groq, Together, Fireworks, your own gateway), or a local model (Ollama, LM Studio, llama.cpp, vLLM).

Since 0.8.2

Live model lists

OpenRouter, OpenCode, custom and local endpoints list their models in Settings, with a free-only filter for OpenRouter; ChatGPT lists exactly the models your account can use through Codex, including GPT-6 Astra and the GPT-5.6 family.

Since 0.11.4

Newest models automatically

Claude's model list (subscription and API key) is read live from Anthropic, the other providers' lists load by themselves when Settings opens, and the Model tab marks the newest model and offers to switch to it.

Since 0.6

Thinking level

from Off to Ultra, mapped to each provider's reasoning setting.

Since 0.4

Web research toggle

for providers that support it.

Since 0.8.0

Provider setup guides

in Settings: how to get a free OpenRouter key and its limits, local-server commands, and a connection test for every provider.

12 features

Account, updates and safety

Since 0.17.3

Answers stay with the paired account

If your Control session expires or you pair this Chrome to another account while saving, the answer is refused without changing saved answers or waiting questions.

Since 0.7.0

Account connection

pair the extension with your Apply with AI account from Settings; two installations per subscription; plan, billing and device management links; approved-update notices.

Since 0.11.3

Stays connected between access checks

once connected, a monthly or annual subscription stays connected; access is renewed quietly in the background and re-verified before each drafting action. If the service can't be reached for a moment, Settings → Account says so, keeps the connection and retries on its own; it asks you to connect again only for a new browser or a removed device.

Since 0.14.0

Product usage reporting

on by default, with a switch in Settings → Account to turn it off. Apply with AI reports only the time and type of an action (a proposal or reply drafted, a job qualified, an application started or confirmed and its outcome, and each connection request, message, event invitation and withdrawn invitation the LinkedIn campaigns send), Upwork or LinkedIn, direct or agent-run use, the extension version, approximate country and a one-way job identifier that prevents duplicate application counts. It never includes job or company text, URLs, generated writing, application answers, profiles, resumes, prompts, provider credentials or passwords. Turning it off stops reporting, clears unsent events and requests deletion of the account's detailed usage history. License checks remain separate. Under the same switch, an automation that could not finish sends a short failure report (the reason as a code, the form's field labels and button texts, the last turns and short site messages, each cut to 80 characters, your own name, email and phone taken out; never typed values, page text, job text, screenshots or prompts) so the extension can be fixed for that site.

Since 0.15.4

Control from the website

with the extension paired, the customer panel on applywithai.app shows the extension’s own Outreach cards (connection campaigns, their messages, withdrawals, event invitations) with the same fields, buttons and wording as Settings, live, and operates this installation from there: start, pause, resume, stop, duplicate, save. The website only ever sees what those cards show, never credentials, cookies or page contents, and only while this Chrome is open with the extension running; every press is checked by the extension exactly as a press in Settings.

Since 0.16.0

The whole extension on the website

the customer panel's Control page shows every section the extension has, from the extension's own description of itself: Setup (provider and model, account, mailbox, website access, the usage-reporting switch; keys, profile and answers stay in the extension), Jobs (start and follow a LinkedIn job-agent run, pause, resume, skip, stop; the questions waiting for you; the latest applications), Outreach (connection campaigns, messages, withdrawals, event invitations), Presence (posting campaigns, the engagement campaign, the auto-reply, each started, changed, paused and stopped from there) and Activity (what the website asked the extension to do and whether it was done). A control added to the extension appears on the website with the next extension release, with no website change.

Since 0.14.9

"What would make this easier?" and friction signals

a box at the bottom of the popup and of Settings sends exactly what you write, when you press Send, to the makers. Under the usage-reporting switch, the extension also notes as fixed codes when one of its own sections is opened again and again, a page is closed with nothing changed, a switch is flipped back within a minute, a run is stopped by hand, a hold is skipped, or a campaign is set up (its kind only), naming its own controls and never any text from a page or from you, so hard-to-find controls get moved and unused features reconsidered. (0.14.2) A skipped hold on a company site names which hold it was (a CAPTCHA, an emailed code, a sign-in, the Submit hand-over…). (0.14.7) A "Skip this job" pressed while the agent is still working names, in fixed words, what it was doing (signing in, filling, waiting for the AI, a page that did not move…) and roughly how long the page had stood still, so a wait people never sit out can be shortened. A LinkedIn run stopped by hand names where it was (waiting out the daily limit, paused for a question or a review, on a company website, in an Easy Apply form, before the first job, between jobs), whether nothing, some or the target's worth had been applied, and roughly how long it had run.

Since 0.6

Nothing sent without you on Upwork

the extension fills forms and message boxes; it never presses Submit or Send on Upwork, never polls Upwork in the background, and every generated text is yours to edit before it goes anywhere. On LinkedIn and external websites, applications are submitted only inside a run you start, and auto-submit can be turned off; LinkedIn replies are only drafted, and connection invitations go out only inside a campaign you start.

Since 0.7.0

Your data stays in your browser

provider keys, drafts, filters, LinkedIn answers and history are stored locally in the extension; job content and form questions go only to the AI provider you chose.

Since 0.7.0

Server safety settings

the service can pause a provider connection or page insertion for everyone if a provider or Upwork changes; the extension explains what is paused.

Since 0.8.2

Clear failure messages

stalled AI requests time out with the model and effort named; refused requests say why; an unactivated installation is told to activate first.

Since 0.11.2

Reasoning models handled

on custom, local, OpenRouter and OpenCode endpoints a model that spends its output budget thinking is retried with a larger budget and reduced reasoning, and told apart from a model that is simply unavailable. Settings and on-page messages name the real failure.

Control that matches the platform

You decide how far each workflow goes.

Automation should be explicit. Upwork remains manual at the final step. LinkedIn only applies inside a run you start, and you can require final review.

  • You start every draft and every LinkedIn run
  • Upwork proposals and messages always wait for you
  • LinkedIn auto-submit is on by default; turn it off for final review
  • Unresolved verification can pause or skip a job; supported checks may be handled automatically
UpworkDraft and fill

You review, edit, and press Send or Submit.

Always manual
LinkedInApply inside your run

Use auto-submit, or stop at the final review step.

Configurable
Read platform rules and account risks Pause, skip, or quit a LinkedIn run whenever you need to step in.
Use your own AI access

Connect the AI that fits your work.

Every supported connection and model control below comes from the promoted inventory for release 0.18.2.

Since 0.8.0

Bring your own AI

Claude (claude.ai subscription sign-in), ChatGPT (ChatGPT subscription sign-in), Claude API key, OpenRouter (including its free tier and the openrouter/free router), OpenCode Zen (with free models), any OpenAI-compatible endpoint (Groq, Together, Fireworks, your own gateway), or a local model (Ollama, LM Studio, llama.cpp, vLLM).

Since 0.8.2

Live model lists

OpenRouter, OpenCode, custom and local endpoints list their models in Settings, with a free-only filter for OpenRouter; ChatGPT lists exactly the models your account can use through Codex, including GPT-6 Astra and the GPT-5.6 family.

Since 0.11.4

Newest models automatically

Claude's model list (subscription and API key) is read live from Anthropic, the other providers' lists load by themselves when Settings opens, and the Model tab marks the newest model and offers to switch to it.

Since 0.6

Thinking level

from Off to Ultra, mapped to each provider's reasoning setting.

Since 0.4

Web research toggle

for providers that support it.

Since 0.8.0

Provider setup guides

in Settings: how to get a free OpenRouter key and its limits, local-server commands, and a connection test for every provider.

One plan for both platforms

Pick a billing rhythm. Keep every feature.

Use the Upwork and LinkedIn workflows with the same subscription. Start with 3 days free, then continue on monthly or annual billing. The annual plan saves $81 compared with twelve monthly payments.

Every feature in the current release
Two active Chrome installations
Protected downloads and release notes

Explore the complete feature list and available AI connections. AI provider access and usage charges are separate.

Read trial, cancellation, and refund terms.

Best valueannual
$99USD per year

3 days free · Save $81 each year

Start 3-day free trial $0 today · then USD $99 per year · cancel any timePayment method required. Renews until cancelled. Stripe shows tax and local-currency options before you confirm.
monthly
$15USD per month

3 days free · Flexible monthly billing

Start 3-day free trial $0 today · then USD $15 per month · cancel any timePayment method required. Renews until cancelled. Stripe shows tax and local-currency options before you confirm.
Clear before you buy

Frequently asked questions

Does Apply with AI auto bid or auto apply to Upwork jobs?

No. On Upwork, you choose the opportunity and start the draft. The extension scores, drafts, and fills; you review and press Send or Submit. It never submits an Upwork application or polls Upwork in the background.

Does Apply with AI send Upwork proposals or messages for me?

No. It drafts, scores, and fills on Upwork. You review and edit every draft, then press Upwork’s Send or Submit button yourself.

Can the LinkedIn job agent submit applications?

Yes, but only inside a run you start. Auto-submit is on by default and can be turned off per run or in Settings. With it off, the agent fills the application and waits for you at the final review step.

How does the 3-day free trial work?

Choose monthly or annual billing and add a payment method in Stripe. You pay $0 today. Unless you cancel before the trial ends, Stripe automatically charges the selected plan and the subscription renews at that interval.

How do I install it without the Chrome Web Store?

Download the protected ZIP from your account, extract it to a permanent folder, enable Developer mode on Chrome’s extensions page, and choose Load unpacked. Read the installation guide before starting your trial.

Does the extension update automatically?

No. Because it is installed in Developer mode, Apply with AI alerts you when an approved release is available. You download it, replace the files in the same permanent folder, and reload the extension manually.

Do I need separate AI access?

Yes. The subscription covers Apply with AI, not model usage. Bring your own AI access using one of the available AI connections. Subscription connections are unofficial and may change. Provider credentials stay in your browser.

Is Apply with AI affiliated with Upwork or LinkedIn?

No. Apply with AI is an independent product and is not endorsed by or affiliated with Upwork or LinkedIn. You remain responsible for your accounts, your content, and compliance with platform rules.

Practical application guides

Prepare for the next opportunity.

Use these guides to choose work carefully and check the details before applying.

Move from promising work to a prepared application.

Draft thoughtful Upwork proposals and manage LinkedIn application runs with your own AI.

Get Apply with AI