Choosing How to Search: Search Filters or Elasticsearch DSL
If you are new to Coresignal's API, one of your first decisions is how to search for data. Two approaches are available:
Search Filters – a simplified, field-based query format
Elasticsearch DSL – a more powerful, code-like query language
Both serve the same purpose: they provide a list of record IDs (such as company, employee, or job IDs) that match your criteria. You then use these IDs with Collect or Bulk Collect endpoints to retrieve the complete data records. The main difference lies in the level of control offered and the effort required to achieve your goal. This guide explains these differences clearly, including real query examples for each approach.
Overview
Best for
Simple, everyday searches
Complex, precise, or advanced searches
Learning curve
Low
Moderate
Format
Flat JSON object with named fields (e.g. "industry": "Software Development")
Structured Elasticsearch query object (query, bool, must, filter, etc.)
What you get back
Record IDs only
Record IDs only
Need a separate Collect step?
Yes
Yes
Endpoint pattern
.../search/filter
.../search/es_dsl or .../semantic_search/es_dsl
Availability
Only on a selection of APIs
Available across all APIs
Cost
Free to query
Free to query
Character/clause limit
N/A
15,000 characters, up to 1,024 boolean clauses
Search Filters
Search Filters are designed for users unfamiliar with query syntax. You send a flat JSON object where each key is a filter name (such as industry, country, employees_count_gte) and each value is a search criterion. There is no nesting or query language involved – only fields and values. The response contains matching record IDs, which you then pass to a Collect endpoint to retrieve complete records.
Before crafting a query, review the complete list of supported filters and their correct formats for the specific endpoint. Field names, value types (string, integer, boolean, date), and options can vary across APIs. Using an unsupported filter or an incorrect format will result in a failed request.
Example: Find IT companies
This request returns the IDs of every company where the industry matches "Information technology" and it was created on or after July 1, 2025 and it was last updated on or after July 1, 2026. When you provide multiple fields, Search Filters automatically combines them with AND.
Combining values within a single field
Some filters accept AND / OR operators inside their own value, using parentheses:
Partial matches
You can use * as a wildcard to match partial values:
This matches "Engineering Solutions," "Engelbert Robotics," and other values beginning with "Eng".
Sorting
By default, Search Filters results are sorted by last_updated and id, both in descending order. For predictable incremental ordering, such as synchronization or data export, add the sort query parameter to sort by id in ascending order:
Pagination
A single request typically returns more results than can appear on one page, since the current limit is 1,000 results per page. Coresignal uses cursor-based pagination with the after query parameter instead of traditional page numbers, utilizing a value from the previous response to fetch the next set of results.
Send your search request as normal.
Check the response headers for:
x-total-results– total number of matching recordsx-total-pages– total number of pages at the current page sizex-next-page-after– the cursor value to use for the next page
Add
?after={x-next-page-after}to your next request to get the following page.
Controlling page size
A standard page includes up to 1,000 results, but you can request a lower number of results per page using the items_per_page query parameter.
Summary
No need to know Elasticsearch.
Every filter is documented with its own expected format (string, integer, boolean, date).
Predefined value lists exist for fields like
industry,country, andsize, so you know exactly what's available.
Only available on a selection of APIs.
You can't mix
AND/OR/NOTlogic across different fields – only within a single field's own value.You can't exclude something directly (e.g.,"companies NOT in Retail").
No fuzzy matching, ranges of text relevance, or scoring control.
Elasticsearch DSL
Elasticsearch DSL (Domain Specific Language) is Elasticsearch's native query language. Coresignal's search/es_dsl endpoint accepts standard Elasticsearch queries directly, providing full boolean logic, wildcards, fuzzy search, and precise ranges. Every query is built around a query object, and in most cases, the logic resides within a bool block. For the full set of query types and clauses, see the official Elasticsearch query DSL documentation.
Before writing a query, review the supported schema for your chosen endpoint. It lists all available fields and their data types, such as text, keyword, numeric, date, and boolean. Because query clauses vary by field type, understanding a field's type in advance can prevent queries that run but return no results silently.
Equivalent IT company search in Elasticsearch DSL
Sorting
Unlike Search Filters, Elasticsearch DSL makes sorting explicit in the query body via a sort array:
Sort by relevance
_score– best match firstSort by
id– ascending, useful for stable, predictable ordering
If no sort value is specified, the results follow the API's default order, which usually prioritizes freshness, similar to Search Filters.
Pagination
Elasticsearch DSL uses the same cursor-based pagination mechanism as Search Filters:
Send your query.
Read the response headers:
x-total-results,x-total-pages, andx-next-page-after.Add
?after={x-next-page-after}to fetch the next page.
Controlling page size
Controlling the number of page results functions similarly to Search Filters, using items_per_page, where you can select any value up to 1,000.
Semantic search version of Elasticsearch DSL
Alongside the standard /search/es_dsl endpoint, Coresignal also provides /semantic_search/es_dsl endpoints. The query format matches standard Elasticsearch DSL. The endpoint applies the query to semantic search data rather than the standard search index.
Summary
Full boolean logic (
must,should,must_not,filter) across any combination of fields.Wildcard and fuzzy queries for less exact or inconsistent values.
Available on every API.
Includes all available schema fields.
Direct control over sorting and relevance scoring.
Writing queries manually can be challenging.
Queries are capped at 15,000 characters, and a single query cannot contain more than 1,024 boolean clauses.
Analytics/aggregation features are not supported, even though standard Elasticsearch supports them elsewhere.
Before you write your first query
Search Filters: confirm the endpoint supports Search Filters, then check its accepted filters and formats.
Elasticsearch DSL: check the endpoint's schema for available fields and their types.
You'll need a Collect or Bulk Collect call afterward to turn matching IDs into full records.
Paginate with
?after={x-next-page-after}from the response header and control page size with?items_per_pagequery parameters.
FAQ
Last updated
Was this helpful?