🎯 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: expanding across North America, APAC & LATAM
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.
👤
You
Feed a JD
Job board, ATS, or Google Doc
🧩
Browser Extension
Extract & Build Criteria
Title variants · seniority · location · 50 companies · industry
🗄️
Notion API
JD + 3 Criteria Queued
Broad · industry (BB companies) · direct competitors
⚙️
Python Daemon
Polls & Triggers
macOS launchd · always on
🔍
Apollo.io API
Search People DB
Title + location + up to 200 fintech companies · 50 results · deduped by Apollo ID
⚖️
Judgment Layer
Score & Bucket
Knockout pre-filter · evidence-gated Claude Haiku · interview / borderline / reject
📋
HTML File + Label
Review & Label
Auto-opens · all buckets shown · label → Golden Set → Notion write-back
Swim lanes
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 seed companies from Boolean Builder DB (8 500 cos · geo + category) · daemon expands to 200
→
Generate 3 criteria JSON
→
Dedup vs Active-only → push to Notion
Store JD + full text
→
Store 3 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
→
Knockout pre-filter (deterministic Python): title/headline signals tech/ops role → hard reject, no LLM cost
→
Evidence-gated scorer: score ONLY on explicitly stated text: function · domain · seniority · lang/geo (0–10 each)
→
Bucket: interview (≥8 + med/high conf) · borderline (5–7) · reject (<5 or KO or insufficient data)
→
Write scores + evidence + bucket back to Notion Candidates DB · generate review HTML
📋 Review HTML
Auto-opens locally
All candidates shown: interview · borderline · reject · sorted by score
→
Per card: subscores · per-dimension evidence · reason · watch points · LinkedIn
→
Label buttons → save to Golden Set DB with reason
TriggerClick Chrome extension on any job posting
|
Daemon polls every10 min · macOS launchd · always on
🔮
Boolean Builder
Pick Company
1/day from queue · filtered by region + category
✨
Claude Sonnet
Find Relevant Role
Job board scrape · filter: seniority · comp · relevancy (no pure IT)
🔍
Apollo.io
Source Candidates
Pipeline 01 on matched role · scored by Claude Haiku
🔍
Apollo.io
Find Hiring Manager
Search by title at target company · Head of TA / VP Sales / CRO
🔶
Clay
Enrich + Signals
Verify contact · funding · hires · personalisation data
✨
Claude Sonnet
Pick, Anonymise & Draft
Best profile · strip identity · personalised email + LinkedIn message
📨
Lemlist
Multichannel Outreach
Email + LinkedIn connection + InMail · D+3 / D+7 follow-ups
🗂️
CRM
Log + Sequence
Contact + full multichannel sequence queued
Swim lanes
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 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)
→
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
Create contact (HM + company)
→
Log candidate bait reference + Clay signals
→
Sync Lemlist sequence status
→
Tag: BD Outreach · Pending Response
TriggerDaily 9am · 1 company/day from Boolean Builder queue
|
StackClay · Lemlist · Apollo · HubSpot
👤
You
Forward to CV Sendout
CV attached · free-form notes · 1 click
📧
Gmail Filter
Auto-apply FLP Process
Dedicated intake alias · zero clicks
⚙️
run_pipeline.py
Orchestrate on Mac
Python 3 · macOS launchd
✨
Claude Haiku
Extract + Pitch
Fields · French pitch · 3–5 §
📄
Docs API
Copy Template + Fill
{{placeholders}} · pitch text · Drive folder
🖼️
pdftoppm + Drive
CV → Images
poppler · PNG · public URLs · inline in doc
✉️
Gmail API
Draft Reply in Thread
Doc link + PDF link · OAuth2
Swim lanes
Forward to CV Sendout intake address, any format, dump notes freely
→
Review Google Doc: adjust pitch · complete "À compléter" fields
→
Send Gmail draft
📧 Gmail Filter
Gmail · Rules
Match: dedicated intake alias
→
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.
TriggerForward candidate email + CV to dedicated intake address
|
OutputGoogle Doc + Gmail draft, ready for review in under a minute
🎙️
Fathom / Otter
Record & Transcribe
Exploration call with client
✨
Claude Sonnet
Parse Mandate
Role · seniority · location · headcount · skills · languages · comp · timeline
🗂️
CRM API
Build CRM Mandate
New deal · stages · contacts · timeline
🔍
Claude Sonnet
Build Full Search
All search filters: title · co · industry · seniority · location · skills · language
✉️
Claude Sonnet
Write Outreach
1st touch + 2 follow-ups + LinkedIn note
⚙️
Pipeline 01
Auto-Source
Score all candidates via Haiku
🔁
Python Loop
Loop Until Target
If shortlist < 40/headcount → expand criteria → re-run
✅
You
Notify & Review
Mac notification + Notion view ready
Swim lanes
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 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
Apollo + Claude Haiku
Run structured Apollo People Search (all criteria)
→
Score each profile vs mandate brief
→
Dedup across all runs by LinkedIn URL
🔁 Python Loop
Sourcing 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
TriggerPaste call transcript + JD link
|
StackFathom · P01 sourcing daemon · Lemlist · CRM API
🧩
Chrome Extension
Intake
LinkedIn URL · CV PDF · LinkedIn PDF · location · sectors · company sizes · language pref · notes
⚙️
pdfminer.six
Parse CV
CV + LinkedIn PDF → experience / education / skills
✨
Claude Sonnet
Assess Profile
Summary · title variants · strengths · inconsistency flags
🔎
X-ray + Job Boards
Scrape Jobs
20+ ATS (Greenhouse/Lever/Ashby…) + WTTJ/Cadremploi/APEC/Indeed FR · 14-day filter
🔍
Apollo.io
Find Contacts
2 HM + 2 TA per company · capped at 30 companies/run
✨
Claude Haiku
Score Targets
1–10 relevancy per target vs candidate profile
✨
Claude Sonnet
Draft 3 Variants
Anonymised pitch · no candidate name · no employer names · under 120 words each
📋
HTML File
Review on Desktop
Drops on Desktop · opens automatically · Skip / Manual / Approve per card
📨
Lemlist + LinkedIn
Launch Outreach
Email D0/D7/D14 · LinkedIn queue via extension · GCal daily to-do
Swim lanes
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
Extract LinkedIn profile data (name · title · location)
→
Encode CV + LinkedIn PDF as base64
→
Send intake to local daemon → runs in background
→
Poll LinkedIn queue every 5 min · draft LinkedIn messages (user hits Send manually)
⚙️ Python Daemon
Flask · macOS 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)
✨ Claude Haiku
Anthropic API · scoring
3-stage judgment: Python knockout pre-filter (function · seniority · geo · language) → Haiku scores function / domain / growth / practical fit → Rule engine applies rules built from past skip reasons
→
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
Email sequences · D0/D7/D14
D0, Email: anonymised pitch via {{icebreaker}} variable · FR or EN campaign
→
D7, Follow-up bump
→
D14, Close-out email
→
Dedicated sending domain · replies forwarded to main inbox
💡 Under the hood: judgment system v2 (knockout + scoring + rules learned from past skip reasons) · unified Chrome extension · HTML review UI (per-recipient checkboxes, 3-variant carousel, FR/EN auto-detection) · email templates D0/D7/D14 in FR + EN. No Clay dependency: funding signals via web scraping.
TriggerChrome extension on any LinkedIn profile → intake form
|
ReviewHTML file on Desktop (opens automatically)
🧮 Cost & Output per Run
One run = one full pipeline loop. Conservative estimates. Flat subscriptions amortised separately.
|
P01 · per JD |
P02 · per company |
P03 · per CV |
P04 · per mandate |
P05 · per candidate |
💰 Cost per run conservative estimate |
~$0.06 |
~$0.60 |
~$0.01 |
~$0.70 |
~$0.60 |
Expected output per run |
~150 candidates sourced · scored & bucketed · review-ready shortlist in ~10 min |
1 target company · 1 best-fit role · 1–2 anonymised candidates · 1 HM in multichannel sequence |
1 client-ready CV dossier (Google Doc) + Gmail draft in under a minute |
Full mandate: CRM deal + search + sequences · 40+ qualified candidates per headcount |
Up to 30 target companies · up to 120 HM/TA contacts · 3 pitch variants each · D0/D7/D14 sequences |
| Main tools |
Apollo · Claude Haiku · Notion · Boolean Builder |
Boolean Builder · Claude Sonnet · Apollo · Clay · Lemlist · HubSpot |
Gmail · Claude Haiku · Google Docs/Drive |
Fathom · Claude Sonnet · Apollo · Lemlist · CRM |
Apollo · Claude Sonnet + Haiku · Notion · Lemlist |
Subscriptions used flat monthly |
Apollo |
Apollo · Clay · Lemlist |
None · free stack |
Lemlist |
Apollo · Lemlist |