Skip to main content

Company sets

Describe the companies you need in plain words, add the conditions each one must meet, and get back a set: a list of companies, websites or communities that were checked against every condition, with a quote from the source that proves each match. Then fill the set with the facts you need (pricing model, free trial, integrations, headquarters…) or order a full company profile for the ones that matter.

Built for lead lists, market maps and partner research: you pay for companies that pass your conditions, not for the ones we looked at and rejected.

The calls work with your usual OmevAI API key and are charged to the same balance. For volumes or questions, contact support@omev.be.

Price​

WhatPrice
One accepted entity in a set$0.020
One found enrichment value (one field for one entity)$0.004
One company profile$0.080

You pay as results are delivered: for each entity accepted into the set, for each enrichment value that was actually found, and for each profile that was actually built. Rejected candidates, not_found values, empty profiles and repeated downloads are not charged. An entity is charged once per set, including across find-more continuations. estimate, get, results, exclude and cancel are free.

Get a price first​

curl -sS https://llmapi.omev.be/v1/sets/estimate \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"operation": "search", "target_count": 25}'

operation is search (with target_count), enrich (with entity_field_values, the number of entities times the number of fields) or intelligence (with entity_count). The answer shows the maximum you can be charged:

{
"quote": {
"operation": "search", "currency": "USD",
"lines": [{"kind": "accepted_entity", "unit_price_usd": "0.020",
"max_units": "25", "max_total_usd": "0.500"}],
"max_total_usd": "0.500",
"note": "accepted entities are charged on the accepted count, not the target"
}
}

Build a set​

curl -sS https://llmapi.omev.be/v1/sets/search \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"entity_type": "company",
"query": "Podcast editing software for small businesses",
"criteria": [
{"description": "Offers a self-serve paid plan", "kind": "must"},
{"description": "Has a free trial", "kind": "should"},
{"description": "Is a freelance agency, not a software product", "kind": "must_not"}
],
"target_count": 25,
"scope": {"markets": ["US"], "languages": ["en"]},
"idempotency_key": "acme-17-podcast-tools-2026-09"
}'
FieldRequiredMeaning
queryyeswhat you are looking for, 5–2,000 characters
entity_typenocompany (default), website or community
criterianoup to 8 conditions, each description up to 300 characters; kind is must (default), must_not or should (preferred, not required); optional id
target_countnohow many entities to accept, default 25, maximum 100
scope.marketsnoup to 5 country codes, default ["US"]
scope.languagesnoup to 5 languages, default ["en"]
idempotency_keynoup to 200 characters, in the body or the Idempotency-Key header; repeating it returns the same job

The answer is the job:

{"schema": "sets_job_ack_v1", "job_id": "osjob_…", "operation": "search",
"status": "queued", "hard_deadline_seconds": 600, "set_id": "oset_…", "target_count": 25}

Keep both identifiers: job_id follows this run, set_id names the set for find-more and exclude.

Follow the job​

curl -sS https://llmapi.omev.be/v1/sets/get \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"job_id": "osjob_…"}'
{"job": {"id": "osjob_…", "kind": "search", "status": "running",
"created_at": "…", "deadline_at": "…", "completion_reason": null,
"progress": {"processed": 12, "total_or_target": 25}}}

status is queued, running or retry_wait, then one of completed, partial, failed, cancelled. completion_reason explains the end: completed, saturated (fewer matching entities exist than you asked for), deadline_reached, budget_exhausted, cancelled, failed. Poll every 5–10 seconds.

To stop a job, send {"job_id": "osjob_…"} to /v1/sets/cancel. Entities accepted before the stop stay in the set.

Download the set​

curl -sS https://llmapi.omev.be/v1/sets/results \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"job_id": "osjob_…", "limit": 100, "offset": 0}'

Results are readable while the job runs, so you can start working with the first entities early. limit is up to 1,000 rows per call (default 100); page with offset.

The envelope holds status, completion_reason, target_count, accepted_count, rejected_count, unknown_count, coverage, saturation_reason and the results list. Each entity of a search:

FieldMeaning
entity_idthe entity in this set; use it for enrichment and profiles
entity_type, name, domain, urlwho it is
relevance_score0–100, how many of your conditions it meets (must and must_not count double)
matched_criteriaeach met condition with criterion, status, source_url, a verbatim evidence quote (up to 200 characters) and a short reason

Find more, import, exclude​

  • /v1/sets/find-more with {"set_id": "oset_…", "additional": 25} starts a new job that adds up to additional entities (1–100) to the same set, skipping every entity already in it. A set holds at most 100 accepted entities.
  • /v1/sets/import with {"set_id": "oset_…", "items": ["example.com", …]} checks your own list (up to 1,000 URLs or domains) against the set's conditions. Items that pass join the set and are charged as accepted entities.
  • /v1/sets/exclude with {"set_id": "oset_…", "kind": "domain", "value": "example.com"} keeps an entity out of later runs of this set. kind is domain, entity, url_prefix or list.

Enrich a set​

Add facts to entities you already have, or to any public website.

curl -sS https://llmapi.omev.be/v1/sets/enrich \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"targets": [{"entity_id": "…"}, {"url": "https://example.com"}],
"fields": [
{"field": "pricing_model"},
{"field": "has_free_trial"},
{"field": "offers_white_label", "instruction": "Does the company sell a white-label version?", "output_type": "boolean"}
],
"idempotency_key": "acme-17-podcast-enrich-1"
}'
FieldRequiredMeaning
targetsyesup to 1,000 targets, each {"entity_id": "…"} or {"url": "https://…"}
fieldsyesup to 10 fields; targets × fields may not exceed 500 per job
idempotency_keynoas for search

Ready-made fields: company_description, product_category, pricing_start, pricing_model, has_free_trial, has_public_api, founding_year, headquarters_country, supported_integrations, primary_platforms.

A custom field is {"field": "<name>", "instruction": "<up to 500 characters>", "output_type": "string"}; output_type is string, number, boolean, string_list or object. Buyer profiles, competitors, buyer queries, communities, pain points and audience themes are not enrichment fields: order a company profile instead.

In results, each entity carries fields, and each field has status (found, not_found, unavailable, error), value and evidence. false is a real found answer. Only found values are charged.

Company profiles​

curl -sS https://llmapi.omev.be/v1/sets/intelligence \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"targets": [{"url": "https://example.com"}],
"preset": "company_intelligence_report_v1",
"output_format": "pdf",
"market": "US",
"language": "en",
"idempotency_key": "acme-17-example-profile"
}'
FieldRequiredMeaning
targetsyes1–25 targets, {"entity_id": "…"} or {"url": "https://…"}
presetnocompany_intelligence_report_v1 for the full client-ready report (exactly one target); omit for a compact profile per target
output_formatnojson (default); with the report preset also pdf, md or csv
market, languagenodefault US and en

Without a preset, each target gets a compact profile in results[].fields: product, icp (buyer segments), key_features, key_benefits, pain_points, competitors, buyer_queries, best_subreddits, coverage and sources.

The report preset returns one document with these sections: product, icp (buyer segments and quotes), key_features, buyer_search_queries, best_subreddits, competitors, coverage, limitations, sources. Every claim points to its source. When you ask results for pdf, md or csv, the answer is the file itself; you can pass another output_format to results later without paying again.

A profile takes longer than a search: allow up to 30 minutes for the report preset.

Errors​

CodeWhen
400invalid JSON, a field out of range, an invalid condition or an unsupported entity_type; the body is limited to 256 KiB
401missing or invalid API key
403the key cannot use this product
404unknown job or set, or one that belongs to another account
409 IDEMPOTENCY_CONFLICTthe idempotency_key was already used with a different body
429too many requests or too many jobs in the queue; retry after a short pause

See Errors for the common format and retry advice.