← back to gallery

FDE Rush

Live tracker of Forward Deployed and AI Implementation roles across labs and enterprise

aijobsfdeleaderboardenterpriseatsscraper
Open product ↗

fde-rush

A live, open-data tracker of Forward Deployed Engineer, AI Solutions Engineer, AI Implementation Engineer, Applied AI, AI Customer Engineer, and AI Platform Engineer roles across enterprise and AI labs.

"The AI implementation gap is 100x bigger than people think." — Aaron Levie fde-rush makes that gap legible by isolating only the deployment-side titles, instead of letting them drown in generic "AI Engineer" noise.

Who it's for

What it does

  1. Every 6 hours, fetches the public job boards of ~120 seed companies across three ATS providers (Greenhouse, Lever, Ashby).
  2. Runs each posting through a regex matrix that admits FDE-class titles and drops researcher / scientist / intern / recruiter / SRE titles.
  3. Writes a daily-snapshot row per company so 30/90-day timelines remain stable across ATS outages.
  4. Surfaces a leaderboard, role-class breakdown, per-company detail page, newest-roles feed, and an embeddable SVG badge per company.

There is no AI / LLM feature, no resume matching, no salary data, no login. It is supply-side intel only.

Data sources

| Provider | URL template | Refresh | Auth |
|---|---|---|---|
| Greenhouse | https://boards-api.greenhouse.io/v1/boards/{slug}/jobs | every 6h | none |
| Lever | https://api.lever.co/v0/postings/{slug}?mode=json | every 6h | none |
| Ashby | https://api.ashbyhq.com/posting-api/job-board/{slug} | every 6h | none |

A job that disappears from a board for two consecutive scrapes is marked is_open=0 with closed_at=now. One miss is treated as transient. User-Agent: fde-rush/1.0 (+https://holyai.me/fde-rush). Per-host concurrency is 4 with 150–400ms inter-request jitter.

If a board returns 404 or malformed JSON, the row is logged in scrape_runs with success=0 and an error message. No counts are fabricated. If a company has never been scraped successfully, its open total is shown as 0 with a pending last-scrape marker.

API

All endpoints are mounted under /fde-rush. No auth.

| Method | Path | Purpose |
|---|---|---|
| GET | /fde-rush/health | {ok, lastScrapeAt, jobCount} |
| GET | /fde-rush/api/leaderboard?limit=20 | Top companies by open FDE-class roles, with WoW delta and 30-day sparkline. |
| GET | /fde-rush/api/leaderboard/timeline?slug=&days=90 | Daily open-count series for one company. |
| GET | /fde-rush/api/companies | Full directory + current totals + stale flag. |
| GET | /fde-rush/api/companies/:slug | One company: open roles, 120-day series, by-class breakdown. |
| GET | /fde-rush/api/jobs?class=&company=&q=&limit=&offset= | Filter and paginate open jobs. |
| GET | /fde-rush/api/jobs/feed?days=7&class= | Chronological newest-first feed. |
| GET | /fde-rush/api/stats | Global totals, by class, by ATS, by category, top mover. |
| GET | /fde-rush/api/methodology | Sources + regex patterns + seed list + recent scrape runs. |
| GET | /fde-rush/badge/:slug.svg | Self-contained dark-theme SVG badge for embedding. |
| GET | /fde-rush/ | SPA. |

How a role is classified

Ordered, first-match-wins regex matrix (positives). Every pattern is exported by lib/titleMatcher.js and rendered live on the Methodology page.

| Class | Match |
|---|---|
| fde | \bforward[\s-]?deployed\b |
| solutions | \b(ai|ml|gen[\s-]?ai|llm|applied|generative)\b[^,]\bsolutions?\s+(architect|engineer|engineering)\b (plus bare Solutions Engineer inside an AI-lab) |
| implementation | \b(ai|ml|gen[\s-]?ai|llm|generative)\b[^,]
\bimplementation\s+(engineer|consultant|architect)\b or \bdeployment\s+engineer\b |
| applied_ai | \bapplied\s+(ai|ml|gen[\s-]?ai)\b[^,]\b(engineer|engineering|lead|manager)\b |
| customer_eng | \b(ai|ml|gen[\s-]?ai|llm)\b[^,]
\bcustomer\s+engineer\b (plus bare inside AI-lab) |
| platform | \b(ai|ml|gen[\s-]?ai|llm)\s+platform\s+(engineer|engineering)\b |

Hard negatives (return null even on positive match): intern, research(er), scientist, recruiter, infrastructure engineer, site reliability, security engineer. The platform pattern is whitelisted past the infra-engineer negative.

Stack

Total ≈ 1700+ LOC across 17 files.

Run locally

npm install
PORT=4890 npm start

Then open http://localhost:4890/fde-rush/. The first scrape kicks in 5 seconds after boot if the database is empty or stale.

To force a scrape:

node scrapers/runAll.js

The SQLite file lives at data/fde.db. Snapshots accumulate one row per company per UTC day.

Out of scope (deliberate)

No auth, no salary data, no resume matching, no email/Slack alerts, no LinkedIn/Indeed/Glassdoor scraping (ToS-restricted), no generic "AI Engineer" roles, no research roles. The product is intentionally narrow — that is the wedge.