Provided by Crustdata
Search Companies by One Filter Condition (Crustdata)
Find companies by exactly one native field condition — industry, country, headcount or funding — and choose which fields each company row returns. Twenty companies per page, paginated with a cursor.
Contract snapshot: 2026-09-29. Inspect in Glasser for current terms.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"filters",
"fields"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1
},
"cursor": {
"type": "string",
"maxLength": 4096,
"minLength": 1
},
"fields": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9_]+(\\.[a-z0-9_]+)*$",
"maxLength": 512,
"minLength": 1
},
"maxItems": 20,
"minItems": 1,
"description": "Dot-paths to return for each company, 1 to 20. Common fields: crustdata_company_id, basic_info.name, basic_info.primary_domain, basic_info.website, basic_info.year_founded, basic_info.employee_count_range, headcount.total, funding.total_investment_usd, funding.last_round_amount_usd, funding.last_fundraise_date, funding.investors, locations.country, locations.city, taxonomy.professional_network_industry, taxonomy.categories, hiring.openings_count, followers.count. Not returned by search: basic_info.industries, competitors.*, roles.*, technographics.*. Full list: https://docs.crustdata.com/company-docs/search/reference#response-fields"
},
"filters": {
"type": "object",
"required": [
"field",
"type",
"value"
],
"properties": {
"type": {
"enum": [
"=",
"!=",
"<",
"=<",
">",
"=>",
"in",
"not_in",
"(.)",
"[.]"
],
"type": "string",
"description": "Comparison. Use \"=>\" and \"=<\" (\">=\" and \"<=\" are not accepted). \"in\" and \"not_in\" take an array; \"(.)\" is a fuzzy all-words match and \"[.]\" a case-insensitive exact-phrase match."
},
"field": {
"type": "string",
"pattern": "^[a-z0-9_]+(\\.[a-z0-9_]+)*$",
"maxLength": 512,
"minLength": 1,
"description": "Dot-path of one indexed company field. Common fields: basic_info.name, basic_info.primary_domain, basic_info.industries, basic_info.company_type, basic_info.employee_count_range, basic_info.year_founded, headcount.total, headcount.growth_percent.12m, funding.total_investment_usd, funding.last_round_amount_usd, funding.last_fundraise_date, funding.last_round_type, funding.investors, locations.country (ISO-3 code such as \"USA\" or a full country name), locations.state, locations.city, taxonomy.professional_network_industry, taxonomy.categories, revenue.estimated.lower_bound_usd, followers.count, technographics.technologies.name. Get exact values from crustdata /company/search/autocomplete. Full list: https://docs.crustdata.com/company-docs/search/reference#searchable-fields"
},
"value": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"anyOf": [
{
"type": "number"
},
{
"enum": [
"Infinity",
"-Infinity",
"NaN"
],
"type": "string"
}
]
},
{
"type": "boolean"
}
]
},
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"anyOf": [
{
"type": "number"
},
{
"enum": [
"Infinity",
"-Infinity",
"NaN"
],
"type": "string"
}
]
},
{
"type": "boolean"
}
]
},
"maxItems": 20,
"minItems": 1
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"limit": 5,
"fields": [
"crustdata_company_id",
"basic_info.name",
"basic_info.primary_domain"
],
"filters": {
"type": "=",
"field": "basic_info.primary_domain",
"value": "stripe.com"
}
}This Endpoint publishes no output schema. You get the Provider's own response body, unchanged — we do not warrant a shape we cannot guarantee.
How to run it
Two fields identify it: the Provider and the endpoint key. The key looks like a path because it usually mirrors the Provider's own, but it is an opaque identifier — not a URL you can open. The same provider:endpoint pair is what your Policy lists.
Once: paste this into your agent's chat. The Skill installs the CLI and logs in by itself. For an agent that cannot use a shell, connect it over MCP instead.
set up https://glasser.ai/SKILL.mdThen ask for this Endpoint:
Run the Crustdata Endpoint /company/search on Glasser with input {"limit":5,"fields":["crustdata_company_id","basic_info.name","basic_info.primary_domain"],"filters":{"type":"=","field":"basic_info.primary_domain","value":"stripe.com"}}glasser run -p crustdata -e '/company/search' -i '{"limit":5,"fields":["crustdata_company_id","basic_info.name","basic_info.primary_domain"],"filters":{"type":"=","field":"basic_info.primary_domain","value":"stripe.com"}}' --endpoint-version 6Pinned to version 6, the one this page shows: if a newer version is published first, the Run is refused instead of charged under new terms. Install and log in first on Get Started.
Once per Run:
IDEMPOTENCY_KEY=$(uuidgen)Run it, and copy this same block to send it again:
curl -X POST https://api.glasser.ai/v1/runs \
-H "Authorization: Bearer gl_..." \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-H "Content-Type: application/json" \
-d '{"provider":"crustdata","endpoint":"/company/search","input":{"limit":5,"fields":["crustdata_company_id","basic_info.name","basic_info.primary_domain"],"filters":{"type":"=","field":"basic_info.primary_domain","value":"stripe.com"}},"endpoint_version":6}'Reuse the same Idempotency-Key to send it again: the second send is a read of the first Run. A new key is a new Run and a new Charge. Pinned to version 6 for the same reason as the CLI.
What each outcome charges
| No result | The Provider answered: nothing matched. | $0.00 |
|---|---|---|
| Provider error | The Provider failed to answer. | $0.00 |
| Timed out | The deadline won. | $0.00 |
| Internal failure | Our defect. | $0.00 |