Building My Own Job Lead Automation System (and Why It Was Harder Than I Expected)

Published: 25 June 2026 · By Sourov Deb

For the past few weeks, I’ve been building a system to automatically find English teaching and training opportunities in France using the official France Travail API. As someone based in La Réunion managing ADHD, bipolar, and a full CELTA qualification process, I needed something stable, low-maintenance, and repeatable — not another manual job board hunt that drains my energy.

The Tools I Used

I built everything inside Google Apps Script (JavaScript in the cloud). The core tools were:

  • France Travail Offres d’emploi v2 API — the official source for active job offers across France (including DOM-TOM).
  • OpenRouter — to enrich leads with AI. I used Claude 3.5 Haiku as the main model and added several free fallback models when the primary one was slow or unavailable.
  • Google Sheets — as my main database to store leads, contact names, outreach drafts, and status.
  • Google Apps Script — to connect everything: pull data, enrich it with AI, write to Sheet, and (soon) send emails.

I also kept an optional GitHub backup layer for summaries, though I’m keeping most sensitive contact data only in my private Sheet.

The Real Obstacles

The biggest difficulties weren’t the API itself — it was the friction in the development process.

Apps Script’s editor sometimes refuses to show functions in the dropdown even when the code is correct. I spent hours fighting with a setup_OnceOnly_() function that simply wouldn’t appear. After multiple failed attempts and reloads, I eventually hardcoded the credentials directly into the script just to move forward. It’s not ideal for security, but it let me actually test and get results.

Another challenge was data quality. France Travail gives good job titles and descriptions, but direct emails and contact persons are often missing. Many leads only have generic “apply through France Travail” links. This forced me to focus more on generating strong outreach drafts that candidates can use manually or via email when contacts become available.

Balancing speed with safety was also constant. I kept a strict DRY_RUN mode for a long time so I wouldn’t accidentally spam anyone while testing.

What I Achieved So Far

In one run I pulled and enriched 159 leads. The system now:

  • Searches multiple keywords across regions
  • Uses AI (with free fallback models) to score fit and write personalized French outreach messages
  • Stores everything cleanly in my Google Sheet with proper columns for follow-up

The outreach drafts already use the correct CELTA phrasing I need: “Formation Cambridge CELTA complétée — 120 heures supervisées, 4 travaux écrits validés au standard requis, qualification en appel.”

Next Steps

I’m now turning off dry-run mode so the leads actually save into my Sheet. After that I plan to add controlled email sending (maximum 20 per run) with attachments. The long-term goal is a stable, low-energy system that surfaces real opportunities without me having to stare at job boards every day.

Building this reminded me that automation is rarely “set and forget” — especially when you’re working with official APIs, quirky editors, and incomplete public data. But once the foundation is solid, it becomes a genuine quality-of-life tool.