Inspiration

Every month, governments publish labour-market statistics that are six weeks old, revised twice, and stop at the national level. Meanwhile every employer on earth publishes their hiring intentions in public, in real time, for free — as job postings. Nobody was reading them at scale for the people who actually need the answer: founders deciding where to hire, analysts pricing a sector, and job seekers deciding what to learn next. That data has always been the preserve of a handful of expensive vendors. We wanted to see whether three people and Gemini could do it for the whole world instead.

What it does

Workopia is two products on one Gemini-powered data spine, launched publicly on 11 June 2026:

Workopia Intelligence (/hi) — a live hiring monitor over 50,513 companies (GICS-mapped), 2,517 cities and 94 countries. Global Monitor, company rankings, city and state hiring trends, a layoffs tracker, per-company pages, and monthly country labour-market reports (Singapore, United States, Australia, United Kingdom) published as web pages plus downloadable PDFs.

Workopia Jobs (/jobs, /browsejobs, /graduates, /casual-jobs) — a job search engine over 8M+ live postings with AI résumé tailoring, cover letters, ATS scoring and salary estimates, also exposed as MCP servers so ChatGPT and Claude users can search jobs from inside their assistant.

How we built it — and how Gemini runs the business

The whole company is four Gemini-powered loops that run without us:

  1. Ingest and classification. Every scraped posting is normalised and tagged by Gemini 2.5 Flash Lite — title family, seniority bucket, work mode, sponsorship status, salary extraction. No human touches a posting. This is the layer that makes the entire dataset queryable, and it is the reason a three-person team can maintain a corpus of this size.
  2. Daily refresh. An unattended pipeline recomputes five data blocks every day (job walls, city lists, company slices, featured totals, share cards) and ships them to production. The numbers on the site are never hand-edited.
  3. User-facing generation. Résumé tailoring, cover letters, job analysis, the career agent and the MCP tools all call Gemini as the primary model (gemini-2.5-flash-lite via the OpenAI-compatible endpoint, JSON mode), with a fallback chain behind it.
  4. The report factory. Our monthly country reports are produced by an agentic pipeline: data panel → exhibits → analysis → web page + PDF. Every chart in every report is built on postings that Gemini classified.

Google Cloud in the stack: Gemini API (paid tier — no training on user data), Google Analytics 4 and Tag Manager, Search Console and the Indexing API for the discovery surface.

What we built during the submission period

  • 20 May — the LLM layer was flipped to Gemini-primary (commit f72d0669), one day after the window opened.
  • 10–11 June — Workopia Intelligence was built and launched: Global Monitor, company rankings, hiring trends, layoffs, tiered accounts, dashboards and watchlists (bda8571f, 28d3ccec).
  • 22–30 June — a full architecture rewrite: design tokens, route groups, kernel/domain layering, a repository data layer, Zod schemas and 397 tests.
  • 2 July — the Intelligence landing page and paid report checkout.
  • June–August — Singapore, US, Australia and UK country reports; a ten-market graduates portal; an Australian casual-jobs portal; hardened MCP servers.

Pre-existing work disclosure: the Next.js application shell, the crawler infrastructure and the job corpus predate 19 May 2026 and were used as our framework. The submitted project — the Intelligence platform, the Gemini-native LLM layer and the current application architecture — was created inside the submission period on top of it.

Challenges we ran into

Cost per posting is the whole business model. At millions of postings, a classification pass that costs a fraction of a cent still decides whether the company exists. Flash Lite at JSON mode was the difference between a viable margin and an impossible one; we rebuilt the routing layer twice to get there.

Coverage noise looks exactly like signal. When a country's postings jump 20%, it is usually us adding employer feeds, not the labour market moving. We had to build a same-store measure — comparing only employers present in both periods — before we could publish anything we were willing to defend. Every report now carries both readings.

Scraping infrastructure is a permanent tax. Bot-protection, rate limits and rendering costs shaped more engineering decisions than the AI did.

Bot traffic pollutes your own analytics. A crawler wave out of one market inflated our user numbers until we identified and firewalled it. We report both the raw and the cleaned figures rather than the flattering one.

Accomplishments we're proud of

  • A live, daily-refreshed hiring picture for 94 countries and 2,517 cities, maintained by three people.
  • 60,346 users and 368,627 search impressions since launch (about 28,000 genuine users once the bot wave is excluded), with zero paid marketing.
  • Monthly country labour-market reports that stand up next to what large consultancies publish — produced by a pipeline, not a research department.
  • Being available inside ChatGPT and Claude via MCP, so the data reaches people where they already are.

What we learned

Classification, not generation, is where an LLM changes a business's economics. Almost nothing we sell is generated text — it is the structure Gemini imposes on eight million messy documents every day. Once that structure exists, everything downstream (search, rankings, trends, reports) is ordinary engineering. The judgement calls we kept for ourselves: what to measure, what to publish, and what not to claim.

What's next

Paid billing opens 31 August 2026 — country report downloads, an Intelligence subscription tier and premium job-seeker tools have been priced and live in public test since June, with billing deliberately switched off while we validated demand. Beyond that: more countries in the monthly report cycle, deeper company-level history, and an API for the postings panel itself.

Built With

Share this project:

Updates