Search millions of companies in Crustdata's database with advanced filtering
Search millions of companies in Crustdata's database with advanced filtering. Supports nested AND/OR filter logic, sorting, and cursor-based pagination. Returns up to 1000 results per request. Filter by company name, HQ country, industry, employee metrics, funding, revenue, year founded, and more. Uses (.) for fuzzy text matching and [.] for exact token matching. Note: This API is in beta. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request.
Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.
Endpoint
POST https://x402.orthogonal.com/crustdata/screener/companydb/search
| Category | Company and compliance |
|---|---|
| Provider host | x402.orthogonal.com |
| Networks | eip155:143, eip155:8453, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp |
| Payment schemes | exact |
| Self-reported calls, 30 days | 1 from 1 payers (the provider's figure, not ours) |
Our checks, last 30 days
| Day | Result | HTTP | Asked | Time |
|---|---|---|---|---|
| 2026-09-30 | valid payment request | 402 | $0.313 | 351 ms |
Example input (from the provider)
{
"body": {
"filters": {}
},
"bodyType": "json",
"method": "POST",
"type": "http"
}
Promised output schema (from the provider)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"properties": {
"cursor": {
"description": "Pagination cursor from previous response (next_cursor field). For later cursor pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response.",
"type": "string"
},
"filters": {
"description": "Filter object with \"op\" (\"and\"/\"or\") and \"conditions\" array. Supports nested AND/OR logic. Each condition has: \"filter_type\" (field name), \"type\" (operator), \"value\". filter_type options: company_name, hq_country, hq_location, largest_headcount_country, linkedin_industries, linkedin_categories, crunchbase_categories, markets, company_website_domain, year_founded, employee_count_range, employee_metrics.latest_count, employee_metrics.growth_12m_percent, employee_metrics.growth_6m_percent, follower_metrics.latest_count, estimated_revenue_lower_bound_usd, crunchbase_total_investment_usd, crunchbase_valuation_usd, last_funding_round_type (values: seed, series_a, series_b, series_c, series_d, series_e), last_funding_date, acquisition_status, linkedin_id. Operators: \"=\", \"!=\", \"in\", \"not_in\", \">\", \"<\", \">=\", \"<=\", \"(.)\" (fuzzy text match). Example: {\"op\": \"and\", \"conditions\": [{\"filter_type\": \"linkedin_industries\", \"type\": \"(.)\", \"value\": \"technology\"}, {\"filter_type\": \"employee_metrics.growth_12m_percent\", \"type\": \">=\", \"value\": 30}]}",
"type": "object"
},
"limit": {
"description": "Results per request (default: 20, max: 1000).",
"type": "integer"
},
"sorts": {
"description": "Array of sort objects. Each has \"column\" (field name) and \"order\" (\"asc\" or \"desc\"). Example: [{\"column\": \"employee_metrics.growth_12m_percent\", \"order\": \"desc\"}]",
"type": "array"
}
},
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}