BloomWatch

API

Newly funded startups and their open roles, as JSON, the day we find them. Pull them into your CRM, a spreadsheet, a script, or an AI tool.

Compare plans

Includes everything in Fresh Membership. Cancel anytime in Settings. Already a member? Upgrade in Settings, Billing. Use cases and a sync example are on the developers page.

Try it now, no key

5 real companies from our free tier (first seen at least 7 days ago), in the same shape the API returns. Limited to 20 calls an hour.

curl https://bloomwatch.co/api/v1/sample

Example response

GET /companies?fundedWithinDays=7&hasJobs=true, one row shown, example values:

{
  "data": [
    {
      "id": "cmexample01",
      "name": "Example Robotics",
      "domain": "example.com",
      "fundingRound": "Series A",
      "roundAmount": 18000000,
      "roundCurrency": "USD",
      "roundCloseDate": "2026-10-21T00:00:00.000Z",
      "locationHq": "Austin, TX",
      "investorNames": ["Example Ventures"],
      "industry": "Robotics",
      "employeeCountEstimate": 35,
      "careersUrl": "https://example.com/careers",
      "openJobCount": 6,
      "firstSeenAt": "2026-10-22T06:00:12.000Z"
    }
  ],
  "total": 214,
  "nextOffset": 50
}

Getting started

Read-only JSON API for newly funded companies and their open roles. Included with the API plan. Create a key in Settings, then send it on every call.

OpenAPI spec and types

The full schema is at https://bloomwatch.co/api/v1/openapi.json (OpenAPI 3.1, no key needed). Import it into Postman or Insomnia, or generate TypeScript types:

npx openapi-typescript https://bloomwatch.co/api/v1/openapi.json -o bloomwatch.d.ts

Command-line client

The open-source BloomWatch CLI prints companies and jobs as terminal tables. One file, no dependencies, Node 20.12 or newer:

export BLOOMWATCH_KEY=bw_live_YOUR_KEY
npx bloomwatch companies --days 7 --jobs

Authentication

curl -H "Authorization: Bearer bw_live_YOUR_KEY" https://bloomwatch.co/api/v1/status

Errors

Every error is JSON with a message and a stable code: {"error":"Invalid API key.","code":"invalid_key"}. Branch on code, not the message.

Limits

GET /companies

Companies, newest funding first.

curl -H "Authorization: Bearer $BLOOMWATCH_KEY" \
  "https://bloomwatch.co/api/v1/companies?fundedWithinDays=7&round=Series%20A&hasJobs=true&limit=50"

Fields: id, name, domain, fundingRound, fundingRoundEstimate (round guessed from the round size, only when fundingRound is null), roundAmount, roundCurrency, roundCloseDate, locationHq, hqCity, hqRegion, hqCountry (ISO code), investorNames, industry, industries, oneLineSummary, employeeCountEstimate, techStack, remotePolicy, careersUrl, openJobCount, firstSeenAt, updatedAt.

GET /jobs

Open roles, newest first, each with the company's funding inlined.

curl -H "Authorization: Bearer $BLOOMWATCH_KEY" \
  "https://bloomwatch.co/api/v1/jobs?postedWithinDays=3&round=Seed&location=NYC&seniority=Senior&limit=100"

Fields: id, title, url (the company's own posting), location (as the job board writes it), city, region, countryCode (ISO), isRemote, remoteScope ("Remote, US"), department, employmentType, seniority, salary (min, max, currency, period; null when the posting states no pay), firstSeenAt, postedAt, closedAt, updatedAt, and company (id, name, domain, fundingRound, fundingRoundEstimate, roundAmount, roundCurrency, roundCloseDate, locationHq, hqCity, hqRegion, hqCountry). closedAt is null on every role this list returns.

GET /companies/{id} and /jobs/{id}

One record by its id, in data. Counts as 1 row. Unknown id: 404.

curl -H "Authorization: Bearer $BLOOMWATCH_KEY" https://bloomwatch.co/api/v1/companies/cmabc123

{"data":{"id":"cmabc123","name":"Acme",...,"openJobCount":4}}

Sync: updatedSince and cursor

To keep a copy in step, pull once, then only what changed. Pass updatedSince (ISO 8601) on the first call, then the nextCursor from each response as cursor. Works on /companies and /jobs, with the same filters.

curl -H "Authorization: Bearer $BLOOMWATCH_KEY" "https://bloomwatch.co/api/v1/jobs?updatedSince=2026-10-01T00:00:00Z&limit=200"

{"data":[...],"total":4210,"limit":200,"nextCursor":"eyJ1Ijoi...","hasMore":true}

curl -H "Authorization: Bearer $BLOOMWATCH_KEY" "https://bloomwatch.co/api/v1/jobs?cursor=eyJ1Ijoi...&limit=200"

GET /status

Freshness and coverage. Counts as 0 rows.

curl -H "Authorization: Bearer $BLOOMWATCH_KEY" https://bloomwatch.co/api/v1/status

{"lastIngestAt":"2026-10-25T06:00:12.000Z","companyCount":1234,"jobCount":5678,"sourceCount":12}

Field notes

CORS

GET is allowed from any origin, so the API works from a browser. Keep keys out of public pages: anyone with your key uses your limits.

Terms

No resale or redistribution of the data, and no building a competing dataset. Keys can be revoked on abuse. Need higher limits? Email bloomwatchsupport@zeninfinity.com.