Bulk Research

Research multiple companies in a single request. Up to 100 URLs per batch, processed concurrently. Credits are reserved upfront and refunded for failures.

POST /v1/research/bulk

Start a bulk research job. Costs 1 credit per URL.

Request body

{
  "company_urls": ["https://example.com", "https://acme.com", "https://widgets.io"],
  "name": "Q1 prospects"
}
urls = ["https://example.com", "https://acme.com"]
bulk = client.bulk_research(urls, name="Q1 prospects")

# Poll until complete
result = client.bulk_research_and_poll(urls, name="Q1 prospects")
for item in result["items"]:
    print(f"{item['company_url']}: {item['status']}")

Response 202

{
  "object": "bulk_job",
  "bulk_job_id": 7,
  "status": "processing",
  "total_items": 3
}
GET /v1/research/bulk/{bulk_job_id}

Get bulk job progress and all items with their status.

Response

{
  "object": "bulk_job",
  "bulk_job_id": 7,
  "name": "Q1 prospects",
  "status": "completed",
  "total_items": 3,
  "completed_items": 2,
  "failed_items": 1,
  "credits_reserved": 300,
  "created_at": "2026-01-28T12:00:00",
  "completed_at": "2026-01-28T12:05:00",
  "items": [
    {
      "id": 1,
      "company_url": "https://example.com",
      "status": "completed",
      "research_job_id": 50,
      "document_id": 20,
      "error": null
    }
  ]
}
GET /v1/research/bulk

List your recent bulk jobs (summaries only). Supports cursor pagination.

Response

{
  "object": "list",
  "data": [
    {
      "object": "bulk_job",
      "bulk_job_id": 7,
      "name": "Q1 prospects",
      "status": "completed",
      "total_items": 3,
      "completed_items": 2,
      "failed_items": 1,
      "created_at": "2026-01-28T12:00:00"
    }
  ],
  "has_more": false
}