🎯 FLP Automation — Infrastructure Map

🔮
Boolean Builder — Proprietary Fintech Company Database
Foundation of search quality across P01 and P02 · built in-house · not available elsewhere
Open Builder ↗
What it is
A curated database of 8 500 fintech companies mapped by country and category. Stored as companies_lookup.json and bundled directly in the Chrome extension — no external API call needed.
Coverage status
✓ EMEA — well stocked · high density across UK, France, Germany, Benelux & Nordics
⏳ Global — North America, APAC & LATAM coverage in progress (WIP)
How it's used
P01: Daemon auto-classifies each JD by fintech category (Claude Haiku), loads up to 200 matching companies from the Boolean Builder, resolves Apollo.io org IDs in parallel (12 threads), and passes them as organisation filters to Apollo People Search — no extension config required.
P02: Source of the daily BD target company list — 1 company per day, picked by region + category.
01

Inbound JD Sourcing

Feed a job posting → auto-source LinkedIn → scored shortlist in Notion within 10 min
Trigger: JD URL (job board · ATS · Google Doc)
👤
You
Feed a JD
Job board, ATS, or Google Doc
1 click
🧩
Browser Extension
Extract & Build Criteria
Title variants · seniority · location · 50 companies · industry
instant
🗄️
Notion API
JD + 3 Criteria Queued
Broad · industry (BB companies) · direct competitors
≤10 min
⚙️
Python Daemon
Polls & Triggers
macOS launchd · always on
per criterion
🔍
Apollo.io API
Search People DB
Title + location + up to 200 fintech companies · 50 results · deduped by Apollo ID
per candidate
Claude Haiku
Score & Filter
Fit 1–10 · notes · skills · auto-reject ≤5
shortlist
📊
You
Review in Notion
Filter Fit Score ≥ 6 · Mac notification
Swim lanes
👤 You
Any browser
Open job posting Click extension Confirm preview Review Notion shortlist (Fit Score ≥ 6)
🧩 Browser Extension
Chrome MV3 · JS
Extract page text + URL Detect title / location / seniority Pick 50 fintech companies from Boolean Builder DB (8 500 cos · geo + category) Generate 2 criteria JSON Dedup vs Active-only → push to Notion
🗄️ Notion
Notion API v1
Store JD + full text Store 2 criteria (Status: Active) Log 1 Sourcing Run per JD Mark criteria Done Store candidates with Fit Score
⚙️ Python Daemon
Python 3 · launchd
Polls every 10 min Fetch Active criteria from Notion Classify JD category (Claude Haiku) Load Boolean Builder · resolve up to 200 Apollo org IDs (12 threads) POST to Apollo People Search API Save candidates + CSV backup Trigger Claude scoring
🔍 Apollo.io
People Search API · Basic plan
person_titles filter + person_locations filter + organization_ids (up to 200 fintech cos) + seniority filter (broad criterion) 50 profiles per criterion · no credits consumed
✨ Claude Haiku
Anthropic API
Classify JD category → load BB company pool Score each profile vs JD (fit 1–10) Write Fit Score · Seniority · Fit Notes · Key Skills · auto-reject ≤ 5 Generate HM brief (summary · fit reasons · watch points · interview Qs) for score ≥ 6
✅ Live | TriggerClick Chrome extension on any job posting | Monitortail -f ~/sourcing/autorun.log | Daemon polls every10 min · macOS launchd · always on
02

Business Development Outreach

Boolean Builder company → find relevant open role → source candidates → find HM → pitch with anonymised candidate
Trigger: Daily at 9am · 1 company per day (cron / launchd)
🔮
Boolean Builder
Pick Company
1/day from queue · filtered by region + category
scrape
Claude Sonnet
Find Relevant Role
Job board scrape · filter: seniority · comp · relevancy (no pure IT)
source
🔍
Apollo.io
Source Candidates
Pipeline 01 on matched role · scored by Claude Haiku
find HM
🔍
Apollo.io
Find Hiring Manager
Search by title at target company · Head of TA / VP Sales / CRO
enrich
🔶
Clay
Enrich + Signals
Verify contact · funding · hires · personalisation data
draft
Claude Sonnet
Pick, Anonymise & Draft
Best profile · strip identity · personalised email + LinkedIn message
send
📨
Lemlist
Multichannel Outreach
Email + LinkedIn connection + InMail · D+3 / D+7 follow-ups
log
🗂️
CRM
Log + Sequence
Contact + full multichannel sequence queued
Swim lanes
👤 You
One-time setup
Select region + category in Boolean Builder → seed BD queue Review drafted emails before send (optional gate) Monitor replies in CRM
🔮 Boolean Builder
Fintech DB · 8 500 cos
Filter by region + category Pick 1 company/day from queue Look up job board URL for company
✨ Claude Sonnet
Anthropic API · job filter
Scrape open roles at target company Filter: exclude pure IT/eng · keep commercial · product · revenue roles Score by seniority + earning potential + relevancy to FLP speciality Select 1 best-fit role to pitch on
🔍 Apollo.io
People Search API · candidates
Run Pipeline 01 sourcing on selected role Score + rank via Claude Haiku Select top 1–2 shortlisted candidates
🔍 Apollo.io
People Search API · HM finder
Search by title at target company (org filter) Target: Head of TA · VP Sales · CRO · COO Reveal email (1 Apollo credit) Return: name · title · email · LinkedIn URL
🔶 Clay
clay.com · enrichment
Verify email via waterfall (Apollo → Hunter → Dropcontact) Confirm LinkedIn URL · scrape profile headline Surface signals: recent funding round · headcount growth · open roles at company Pass enriched data to Claude for hyper-personalised draft
✨ Claude Sonnet
Anthropic API · drafting
Anonymise candidate: "7 yrs KAM · Adyen + Worldline background" Draft personalised BD email (HM name · role · candidate hook · Clay signal) per tone_rules.txt Write LinkedIn connection note (300 char) + InMail variant Generate D+3 / D+7 follow-up variants (email + LinkedIn message)
📨 Lemlist
Email + LinkedIn sequences
Step 1 — Email: personalised pitch with anonymised candidate Step 2 — LinkedIn: send connection request + personalised note to HM Step 3 — InMail: direct message on LinkedIn if 1st degree / no email reply D+3 / D+7 follow-ups: email + LinkedIn message Track: opens · clicks · LinkedIn accepts · replies → pause on positive signal
🗂️ CRM
HubSpot
Create contact (HM + company) Log candidate bait reference + Clay signals Sync Lemlist sequence status Tag: BD Outreach · Pending Response
🔲 Planned | Triggerlaunchd · daily 9am · 1 company/day from Boolean Builder queue | RequiresClay · Lemlist · Apollo credits · tone_rules.txt
03

CV Sendout

Forward candidate email + CV → auto-label → Google Doc + Gmail draft → Fabien reviews + sends
Trigger: Forward to fabien+flp@flprecruitment.com · Gmail filter auto-applies FLP Process
👤
You
Forward to CV Sendout
CV attached · free-form notes · 1 click
instant
📧
Gmail Filter
Auto-apply FLP Process
to:fabien+flp@ · zero clicks
auto
⚙️
run_pipeline.py
Orchestrate on Mac
Python 3 · macOS launchd
~5 sec
Claude Haiku
Extract + Pitch
Fields · French pitch · 3–5 §
~3 sec
📄
Docs API
Copy Template + Fill
{{placeholders}} · pitch text · Drive folder
~20 sec
🖼️
pdftoppm + Drive
CV → Images
poppler · PNG · public URLs · inline in doc
~2 sec
✉️
Gmail API
Draft Reply in Thread
Doc link + PDF link · OAuth2
Swim lanes
👤 You
Gmail
Forward to CV Sendout (fabien+flp@flprecruitment.com) — any format, dump notes freely Review Google Doc — adjust pitch · complete "À compléter" fields Send Gmail draft
📧 Gmail Filter
Gmail · Rules
Match: to:fabien+flp@flprecruitment.com Apply label: FLP Process Label removed by pipeline after processing — no reprocessing
⚙️ run_pipeline.py
Python 3 · macOS
Search Gmail for FLP Process label Download email body + CV PDF attachment Anchor: CV filename → subject → first body line for Name/Role/Client Call Claude Haiku · create Drive folder · copy + fill Doc template Convert CV → images → upload → insert inline · create Gmail draft
✨ Claude Haiku
Anthropic API
Read subject + CV filename + free-form body (any format, no structure required) Extract: Name · Role · Client · Location · Nationality · Rate · Availability · Languages · LinkedIn Generate French pitch — Background "Bref," · Fit "Ce qui colle pour X :" · Challengers · Pour info
📄 Google Docs API
Google API · OAuth2
Copy FLP template doc into Drive: Root / Client / Role Replace {{NAME}} {{LOCATION}} {{POSITION}} {{RATE_SALARY}} {{AVAILABILITY}} {{LANGUAGES}} {{LINKEDIN_URL}} Insert pitch text · append CV images inline
🖼️ pdftoppm + Drive
poppler · brew · Drive API
pdftoppm (brew install poppler) — CV PDF → PNG per page, Mac-native Upload each PNG to Drive · make public (anyoneWithLink) insertInlineImage via Docs API · lh3.googleusercontent.com/d/{id}
✉️ Gmail API
Google API · OAuth2
Create draft reply in original thread Body: link to Google Doc + link to original CV PDF FLP Process label removed — thread won't reprocess

💡 No format required: dump call notes, LinkedIn text, forwarded emails — anything. Claude Haiku extracts all structured fields. Missing fields are filled with "À compléter" for Fabien to complete before sending.

✅ Live | TriggerForward email tofabien+flp@flprecruitment.com | Runpython3 ~/CV\ Sendout/run_pipeline.py | Dry run--dry-run | Specific thread--thread-id THREAD_ID | ⚠️ TODOlaunchd auto-run · rotate Anthropic API key
04

Full Mandate Launch

Exploration call + JD → everything created automatically → sources until target headcount is reached
Trigger: Call transcript or notes + JD link
🎙️
Fathom / Otter
Record & Transcribe
Exploration call with client
extract
Claude Sonnet
Parse Mandate
Role · seniority · location · headcount · skills · languages · comp · timeline
create
🗂️
CRM API
Build CRM Mandate
New deal · stages · contacts · timeline
generate
🔍
Claude Sonnet
Build Full Search
All LinkedIn filters: title · co · industry · seniority · location · skills · language
generate
✉️
Claude Sonnet
Write Outreach
1st touch + 2 follow-ups + LinkedIn note
run
⚙️
Pipeline 01
Auto-Source
Score all candidates via Haiku
check
🔁
Python Loop
Loop Until Target
If shortlist < 40/headcount → expand criteria → re-run
done
You
Notify & Review
Mac notification + Notion view ready
Swim lanes
👤 You
Fathom + Cowork
Run exploration call (Fathom records) Paste transcript + JD link into Cowork Approve mandate brief before launch Review 40-candidate shortlist when ready
🎙️ Fathom
Fathom / Otter.ai
Auto-join call · transcribe in real time Export transcript + summary
✨ Claude Sonnet
Anthropic API
Extract structured mandate: role · seniority · headcount · location · comp · timeline · ideal companies Build full LinkedIn search JSON (all 7+ filters) Generate outreach sequences (1st touch + D+3 + D+7 + LinkedIn) Expand criteria if loop needs more (relax geo · add title variants)
🗂️ CRM
HubSpot / Vincere / Notion
Create mandate deal (client · role · stage: Intake) Set pipeline stages (Intake → Sourcing → Shortlist → Interview → Offer) Link contacts (client-side HM + internal) Log all sourcing activity + cost
⚙️ Pipeline 01
Apify + Claude Haiku
Run structured LinkedIn search (all criteria) Score each profile vs mandate brief Dedup across all runs by LinkedIn URL
🔁 Python Loop
autorun.py daemon
Count candidates with Fit Score ≥ 6 If < 40 × headcount → ask Claude to expand criteria Re-run sourcing (max 5 iterations) Notify + stop when target reached
📨 Lemlist
Email + LinkedIn sequences
Import shortlist candidates with LinkedIn URLs Enroll in Claude-written multichannel sequence (email + LinkedIn connection + InMail) Track: email opens · LinkedIn accepts · replies Pause sequence on positive signal · sync reply to CRM
🔲 Planned | TriggerPaste Fathom transcript + JD link → Cowork | RequiresFathom · P01 sourcing daemon · Lemlist · CRM API
05

Candidate Outbound Placement

Chrome extension intake → parse CV → scrape jobs → find HM → score + draft 3 pitch variants → HTML review on Desktop → Lemlist launch
Trigger: Chrome extension on linkedin.com/in/* page
🧩
Chrome Extension
Intake
LinkedIn URL · CV PDF · LinkedIn PDF · location · sectors · company sizes · language pref · notes
parse
⚙️
pdfminer.six
Parse CV
CV + LinkedIn PDF → experience / education / skills
assess
Claude Sonnet
Assess Profile
Summary · title variants · strengths · inconsistency flags
scrape
🔎
X-ray + Job Boards
Scrape Jobs
20+ ATS (Greenhouse/Lever/Ashby…) + WTTJ/Cadremploi/APEC/Indeed FR · 14-day filter
find HM
🔍
Apollo.io
Find Contacts
2 HM + 2 TA per company · capped at 30 companies/run
score
Claude Haiku
Score Targets
1–10 relevancy per target vs candidate profile
draft
Claude Sonnet
Draft 3 Variants
Anonymised pitch · no candidate name · no employer names · under 120 words each
review
📋
HTML File
Review on Desktop
Drops on Desktop · opens automatically · Skip / Manual / Approve per card
launch
📨
Lemlist + LinkedIn
Launch Outreach
Email D0/D7/D14 · LinkedIn queue via extension · GCal daily to-do
Swim lanes
👤 You
Chrome Extension
Open candidate LinkedIn profile → click extension Upload CV PDF + LinkedIn PDF · add notes · pick sectors/sizes · set language Review HTML file on Desktop: Skip / Manual / Approve per card Click Launch → Lemlist sequences start + GCal to-do updated
🧩 Chrome Extension
Chrome MV3 · localhost:5005
Extract LinkedIn profile data (name · title · location) Encode CV + LinkedIn PDF as base64 POST to /p05/intake → daemon runs in background (202 response) Poll LinkedIn queue every 5 min · draft LinkedIn messages (user hits Send manually)
⚙️ Python Daemon
Flask · localhost:5005 · launchd
pdfminer.six: extract CV text + LinkedIn PDF text Heuristic parser: split into experience / education / skills X-ray DuckDuckGo: 20+ ATS (Greenhouse, Lever, Ashby, Teamtailor...) + WTTJ/Cadremploi/APEC/Indeed FR · 14-day freshness filter Funding signals via DuckDuckGo HTML scrape · basic email verification Build HTML review file → drop on Desktop → open automatically
✨ Claude Sonnet
Anthropic API · assessment
Assess profile: summary · title variations · strengths · CV/LinkedIn inconsistency flags · candidate language detection Draft 3 anonymised pitch variants per target (no candidate name, no employer names, under 120 words, no em dashes)
✨ Claude Haiku
Anthropic API · scoring
Score each target 1–10 relevancy vs candidate profile Rationale per score · low scorers deprioritised in review
🔍 Apollo.io
HM + TA finder per company
Up to 2 HM + 2 TA per company · /mixed_people/search Capped at 30 companies per run Return: name · title · email · LinkedIn URL
🗄️ Notion
Notion API · backend only
Log run (status · candidate · timestamp) Log each outreach decision (approved / skipped / manual + reason) Queue LinkedIn messages (status: pending) · mark done after extension sends Dedup: check company history across candidates before outreach
📨 Lemlist
flp-placements.com · D0/D7/D14
D0 — Email: anonymised pitch via {{icebreaker}} variable · FR or EN campaign D7 — Follow-up bump D14 — Close-out email Sending domain: flp-placements.com (separate from personal Gmail)

🔨 Built — pending API keys: full daemon at localhost:5005 · unified Chrome extension · HTML review UI v5 (per-recipient checkboxes, 3-variant carousel, card locking, FR/EN auto-detection) · email templates D0/D7/D14 FR+EN · macOS launchd plist · setup.sh. No Clay dependency — funding signals via DuckDuckGo scraping.

🔨 Built — pending API keys | TriggerChrome extension on linkedin.com/in/* → intake form | Daemonlocalhost:5005 | ReviewHTML file on Desktop (opens automatically) | PendingAnthropic key · Apollo key · Notion DBs · Lemlist campaigns · GCal service account · domain warming (3 weeks)

🧮 Tools, Usage & Cost per Loop

One "loop" = one full pipeline run. Costs are pessimistic estimates. Free-tier headroom noted where relevant.
Tool Pricing model P01 — per JD P02 — per company P03 — per CV P04 — per mandate P05 — per candidate
Apollo.io
People Search API · Basic
$49/mo flat · search = $0/run · email reveal = 1 credit/contact $0/run
flat fee · ~$2.50 amortised at 20 JD/mo · full names included
$0/run
flat fee · HM searches included
Apify
harvestapi · get-leads actors
~$0.10/run · $5/mo free tier (replaced by Apollo) $0.20
2 runs (role sourcing)
$0.60
~6 runs avg (loop)
Claude Haiku
Scoring · filtering
$1/M in · $5/M out tokens $0.12
~150 candidates · scoring + HM briefs
$0.05
~50 candidates
~$0.02
extraction + French pitch
$0.12
~100 candidates
Claude Sonnet
Generation · extraction
$3/M in · $15/M out tokens $0.08
email + anonymisation
(Haiku handles P03) $0.20
extraction + search + sequences
$0.15
profile assessment + pitch + ~15 emails
Apollo.io
HM email reveal
1 credit/email reveal · Basic plan includes credits ~$0.10
1 HM email reveal/company
~$0.50
~5 HM email reveals avg
Fathom
Call transcription
Free plan available $0.00
free plan covers this
Gmail API
CV sendout · known clients
Free (uses your Gmail)
(Lemlist handles HM outreach)
$0.00
(Lemlist handles HM outreach)
Clay
Enrichment · signals · waterfall email
~$149/mo flat (Starter) · ~$0.05–0.10/contact enriched ~$0.10
~1–2 HM contacts enriched
(replaced by DuckDuckGo scraping)
Lemlist
Email + LinkedIn sequences
~$99/mo · email + LinkedIn steps included ~$0.50
amortised · email + LinkedIn + InMail to HM
~$0.50
amortised · candidate outreach sequences
~$0.50
amortised · email + LinkedIn to HMs
Notion API
Database + storage
Free (internal integration) $0.00 $0.00 $0.00 $0.00 $0.00
Boolean Builder
Fintech company DB · netlify app
Built in-house · free · 8 500 companies $0.00
companies_lookup.json
$0.00
same DB
$0.00
same DB
$0.00
target cos from same DB
Google Docs + Drive API
Template copy · field fill · image insert
Free (Google Workspace) $0.00
pdftoppm local · Drive storage free tier
💰 Estimated total per loop (pessimistic) ~$0.12
+ $49/mo Apollo flat
~$1.25
+ $49 Apollo + $149 Clay + $99 Lemlist flat
~$0.02
Haiku only · all other tools free
~$1.45
+ $99 Lemlist flat
~$1.15
+ $49 Apollo + $99 Lemlist flat · no Clay