Skip to content
The pipeline

Fill & enrichment

Description, LinkedIn page, funding and pay — completed with evidence.

Fill takes a bare company row and completes it — with no model and no guessing. Whatever it can't prove it leaves empty, and writes down why.

What one fill does#

  1. Read the description
    Candidates from the homepage's meta tags, JSON-LD and first paragraphs, then the About page, then the LinkedIn About text. Each passes the description guardrail (60–600 characters, about this company, not boilerplate); the best one is stored with its source.
  2. Find the LinkedIn page
    The company's own homepage usually links its LinkedIn page — that link is kept even when LinkedIn itself is unreadable. When the page can be read (as a guest), size band, founding year and a jobs count are added. Since 23 Oct 2026 every scrape that comes across a company's LinkedIn link stores it the same way — normalised, with its source, never overwriting a different value silently — because the People tab can only be bought for a company whose LinkedIn page is known.
  3. Prove hiring
    careers.run_company() looks for any careers page or board and reads its roles. Any open role on their own page counts as proof. See Hiring proof.
  4. Find the funding
    Round, amount, date and investors from a keyless search, each validated (a real amount, not debt; a date not in the future; a quote that names the company).
  5. Record what is missing, and why
    Every gap gets a reason in fill_state — “roles only on instahyre.com (an aggregator)”, “site blocks readers”, “no careers page anywhere on their site” — shown on the dashboard after a fill.

When it runs#

TriggerScope
Every free tickUp to 20 companies, ★ list → India → remote; a company is refilled after 7 days (30 once complete).
Today’s company (Best bets)“Fill it”, or decide fill — then the brain decides it again
Opening a company pageThat company, unless complete or filled in the last 6 hours
Fill now (Graph page)That company, now — the result says what is still missing and why
The Apify job, every 30 minutesFirst, for free: up to 30 homepages read for their LinkedIn link (★ list, Bengaluru / Hyderabad and the remote targets)
A mixer runThe LinkedIn page the company’s own job ads agree on
fill.backfill_linkedin()By hand: the LinkedIn link from every homepage in those cohorts (776 found on 19 Oct 2026)

Enrichment with models#

Separately, the paid tick fills what needs reading comprehension — a company's story, a better description, stipend and PPO mentions — through enrich.py, inside the model budget. Pay from levels.fyi is read through scrape.do (levels.py) and converted to fresher ₹ LPA.

Evidence on every field#

Each written value records its evidence, source URL, channel, time and confidence in field_meta. When two sources agree, confidence rises; when they disagree, the better-evidenced value wins and the loser is kept as a rejection with the reason “conflict”. Nothing is silently overwritten.

Why a fill sometimes finds nothing
Most remaining gaps are real absences: roles posted only on aggregators, careers pages with no open role, or sites that block readers. Clicking Fill again won't change those — the reason shown tells you which it is.