840 applications. 6 months. One AI agent. I built JobApplier.site to automate my own job search, and then I used it — extensively. Here's every number, every insight, and every mistake I made along the way.
The Setup
I'm a senior software engineer with 8 years of experience. Backend-heavy: Python, TypeScript, PostgreSQL, AWS. I was looking for remote senior or staff roles at Series A–D startups and mid-size tech companies. My target compensation was $180–220K base.
The agent I built (which became JobApplier.site) scanned LinkedIn, company career pages, and ATS portals. For every job matching my criteria, it:
- Extracted the job description
- Calculated a semantic match score (0-100) against my resume
- If score ≥ 65: tailored my resume, generated a cover letter, and applied
- If score < 65: logged it and moved on
The Raw Numbers
| Total applications | 840 |
| Average match score | 78.4 |
| Callback rate (phone screen) | 14.6% (123 callbacks) |
| Technical interview rate | 7.1% (60 interviews) |
| Final round rate | 2.6% (22 final rounds) |
| Offers | 6 |
| Cost (API + compute) | $127.40 total (~$0.15/application) |
| Time saved (estimated) | 280+ hours |
What Worked
1. Per-JD Tailoring Was the Biggest Factor
In my first 100 applications, I ran an A/B test: 50 with generic resume, 50 with per-JD tailored resume. Results:
- Generic: 3 callbacks (6%)
- Tailored: 9 callbacks (18%)
3x improvement. After that, I never sent a generic resume again. Every single application got a tailored resume with JD-specific keyword injection, reordered bullets, and an adjusted title line.
2. Match Score Threshold Was Crucial
Early on, I set the threshold at 50 — basically "apply to anything remotely relevant." My callback rate was 8%. When I raised it to 65, callbacks jumped to 14.6% while total applications dropped by only 15%.
The insight: a higher threshold doesn't mean fewer interviews. It means fewer wasted applications and a higher signal-to-noise ratio.
3. Cover Letters Moved the Needle
I tested applications with and without cover letters for 200 applications:
- Without cover letter: 11.2% callback
- With tailored cover letter: 15.8% callback
The key word is "tailored." The cover letter had to reference specific things from the JD — a product the company shipped, a technical challenge they mentioned, anything specific. Generic cover letters performed the same as no cover letter.
4. Stealth Automation Mattered
Around application #200, I got a LinkedIn rate limit warning. I had been applying too fast — 30+ applications in a day with consistent timing intervals. After implementing warmup ramps, Gaussian-distributed delays, and daily caps (max 12 applications/day), I never got flagged again.
What Failed
1. Applying to Jobs Below My Level
I applied to some mid-level roles thinking I'd be a shoo-in. Callback rate on mid-level roles: 8%. On senior roles: 16%. Recruiters are pattern-matching level, and an overqualified candidate is a flight risk. I stopped applying below-level at application #300.
2. Custom Question Hallucinations
In 12 applications, GPT answered a custom question about visa sponsorship differently than my configured answer. This is why I rebuilt the form handler to use deterministic answers for all critical questions (authorization, sponsorship, salary, availability) and only GPT for genuinely freeform questions.
3. Weekend Applications Underperformed
Applications submitted Saturday-Sunday had a 9% callback rate vs. 16% for Tuesday-Thursday. Either recruiters buried in Monday email triage skip weekend submissions, or ATS sorting pushes recent applications to the top and Monday/Tuesday applications leapfrog weekend ones.
I configured the agent to only apply Tuesday through Thursday.
4. Some ATS Portals Were Brittle
Workday and iCIMS forms broke regularly — login flows changed, form fields moved, CAPTCHA challenges appeared. Greenhouse, Lever, and Ashby were far more stable. I ended up deprioritizing Workday companies and focusing on Greenhouse/Lever shops.
The Money Math
Let me put this in perspective:
- 840 applications × 20 minutes each = 280 hours of manual work saved
- Total cost: $127.40 in API calls (GPT-5.4 for tailoring + cover letters)
- Cost per callback: $1.04
- Cost per offer: $21.23
I spent $127 and saved 280 hours. If I value my time at $100/hour (conservative for a senior engineer), that's a 220x ROI.
The Unexpected Lessons
- The job search is a funnel, not a lottery. Optimize conversion rates at each stage, not volume at the top.
- Timing matters more than you'd think. Tuesday morning applications outperform Friday afternoon by 2x.
- Deterministic > probabilistic for critical fields. Never let AI guess on visa sponsorship, work authorization, or salary requirements.
- Match score thresholds save you from yourself. Without a floor, you'll apply to everything. The floor forces quality.
- Six offers from 840 applications is actually a great output. Industry averages suggest 200+ applications per offer for senior roles. I was at 140 per offer — and I wasn't manually doing any of the work.
What I'd Do Differently
If I were starting over:
- Start with a match threshold of 70, not 50
- Only apply Tuesday through Thursday from the beginning
- Spend more time on my master resume YAML before starting the agent
- Set up interview prep documents from day 1 (I added this feature at application #400)
Try It Yourself
Everything I described is now available as JobApplier.site. The free tier gives you 3 AI-tailored applications per month — enough to see if the tailoring approach works for your profile before committing.
Or if you're technically inclined, the full agent is open-source. Fork it, audit it, run it yourself.
Either way: stop copy-pasting. Start tailoring. The data speaks for itself.
Ready to automate your job search?
3 AI-tailored applications per month. Free forever.
Get Started Free