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
- Harbor RelayWaitingharbor-relay.exampleCompany
- MoonmossWaitingmoonmoss.exampleProject
- Quietfern VenturesWaitingquietfern.exampleInvestor
- GildmintWaitinggildmint.exampleCompany
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.
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.