Teminife ObafemiBackend engineer · Nairobi

Structured facts from any website

JobStash needs the same facts about every company, project and investor it tracks, and no two websites put them in the same place.

Let the batch run, then press a trouble button below and watch the crawler recover so every site still ends with a result.

The batch

  1. Harbor RelayWaitingharbor-relay.exampleCompany
  2. MoonmossWaitingmoonmoss.exampleProject
  3. Quietfern VenturesWaitingquietfern.exampleInvestor
  4. GildmintWaitinggildmint.exampleCompany
Cause trouble

Now reading Harbor Relay

Goal
Find the facts JobStash tracks
Subject
Harbor Relay, a company
Start page
harbor-relay.example

Pages it clicked through

    Waiting to start.

    Browser sessionNonefrom the shared pool
    Tokens counted0on this site
    Last extractionNone yet, limit 800 each

    What it kept

    Waiting
    GitHub accountShape: a github.com account
    Still looking
    Careers pageShape: a working link
    Still looking
    Hiring toolShape: a known hiring tool
    Still looking
    TeamShape: names with roles
    Still looking
    FundingShape: round, amount and year
    Still looking
    Contract addressesShape: 0x and 40 characters, with chain
    Still looking
    Related projectsShape: parent or child, with a link
    Still looking

    Every site, company, address and value here is made up. The wait, the session numbers and the token limit are illustrative.

    I designed and built the JobStash research crawler in 2025, with DuckDegen contributing. David Leonardi later added site probing, a durable work queue and a router across model providers.

    For each target, JobStash wants its GitHub account, careers page and hiring tool, team, funding, contract addresses, and parent or child projects. A scraper written for one site breaks on the next.

    A browser agent

    The crawler gets a goal, a subject and a starting page, then navigates the site until it finds what it needs or runs out of pages. Each fact is a tool with a strict schema, and an answer that does not fit is discarded. Contract addresses and related projects have their own steps.

    Every run terminates

    Dead domains, parked pages, crashed browsers and rate limits are all expected. Every run ends as found, partly found, or not a real target. Browser sessions come from a shared pool, and a dead session or a rate limit restarts the site on a fresh one. Known bad sites are skipped.

    Cost

    Every extraction has a token limit, runs default to the cheapest adequate model, and the agent tracks its own token use. The investor, organization and project importers all run on it.