> ## Documentation Index
> Fetch the complete documentation index at: https://docs.letterdrop.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Filters

> Filter on any key, analytics periods and dedicated filters.

Two kinds of filter, all optional, all ANDed together. `GET /fields?object=account` (or `contact`, `signal`, …) lists every key, whether it can be filtered, its operators and its values.

### Any key: `filter[<key>]`

`/accounts` and `/contacts` filter on any key their rows carry:

```text theme={null}
filter[company_industry]=Software Development
filter[crm_latest_opp_amount][gte]=10000
filter[contacts.contact_job_title][contains]=VP
filter[account_estimated_renewal_date][lte]=2027-03-31
filter[crm_account_owner_email][exists]=false
```

Repeat `filter[<key>]` for any of several values. A key inside a list (`contacts.<key>`, `signals.<key>`, `contacts.signals.<key>`) matches when any element matches, and `ne` when none does. `account_competitors` matches one competitor at a time. Contact emails and phones need `include=contact_info`; buying-committee and job-postings keys need their `include`. `filter[...]` on a key and operator `/fields` lists in `fast_operators` (priority, stage, competitors, owners, country, signal dates, …) narrows the table read itself, as the dedicated filters below do. On any other key it filters the rows of the query, so the first request of that filter set reads the whole table; later pages are cached. Combine a slow key with a fast one to keep the read small.

| Operator | Meaning |
| - | - |
| `eq` | Equals. Repeat the parameter for any of several values. The default: filter\[key]=value. |
| `ne` | Equals none of the values. |
| `contains` | Contains the text, ignoring case. |
| `gt` | Greater than (dates: after). |
| `gte` | Greater than or equal (dates: on or after). |
| `lt` | Less than (dates: before). |
| `lte` | Less than or equal (dates: on or before). |
| `exists` | true = has a value (not empty, not null); false = empty or null. |

### Analytics periods

Every `/analytics` metric requires `start_date` and `end_date` (`YYYY-MM-DD`, UTC, both inclusive) and reports on that period only: the accounts whose latest signal falls in it, and the deals created, meetings booked, outreach, replies and closed deals dated in it. Nothing is reported over a rolling window; `data.period` echoes the dates back.

### Dedicated filters

`/accounts`, `/contacts` and every `/analytics` metric take these as plain query parameters (analytics takes only these, minus the `*_within_days` and `*_older_than_days` ones). A filter is named after the key it filters and takes that key's values. A list filter **repeats** its parameter for several values (`?account_priority=High&account_priority=Medium`), which matches any of them. Do not comma-join: names can contain commas. Unknown parameters and values are rejected with a 422 that names them.

| Parameter | Type | Allowed values / limits | Description |
| - | - | - | - |
| `search` | string | max length 200 | Free-text match on company and contact names. |
| `account_competitors` | string\[] | 1–200 items | |
| max length 500 | Accounts with signals for any of these competitors (names from GET /fields?object=account). | | |
| `account_competitor_cycle_stage` | string\[] | `Aware of Competitor``Historical``Prospecting``Early Stage``Late Stage` | |
| 1–200 items | Inferred competitor buying-cycle stage. | | |
| `account_priority` | string\[] | `High``Medium``Nurture` | |
| 1–200 items | Priority. | | |
| `account_icp_fit` | string | `true``false` | true = only ICP-fit accounts, false = only the rest. |
| `account_signal_freshness` | string\[] | `Recent``Historic``Stale` | |
| 1–200 items | Stale alone = only stale accounts; Recent and Historic together = exclude stale accounts. Other combinations are rejected: Recent and Historic cannot be filtered apart yet. | | |
| `latest_signal_within_days` | integer | 1–3650 | Accounts whose latest signal was within the last N days. |
| `latest_signal_after` | string | — | Latest signal on or after this date. |
| `latest_signal_before` | string | — | Latest signal on or before this date. |
| `company_size` | string\[] | 1–200 items | |
| max length 500 | Employee bands, e.g. "51-200". | | |
| `company_hq_country` | string\[] | 1–200 items | |
| max length 100 | Headquarters country, ISO 3166-1 alpha-2 (e.g. "US"); a country name ("United States") is accepted too. | | |
| `crm_has_account` | string | `true``false` | true = the account was already in your CRM when we found it, false = net new (it was not). An account added to the CRM later can have crm\_account\_url set and still be net new. |
| `crm_is_customer` | string | `true``false` | true = your customers only, false = exclude them. |
| `crm_has_opp` | string | `true``false` | false = accounts with no CRM opportunity. true is the same as listing every crm\_latest\_opp\_stage. |
| `crm_latest_opp_stage` | string\[] | 1–200 items | |
| max length 500 | Latest opportunity's stage, as your CRM labels it (values from GET /fields?object=account). | | |
| `crm_latest_opp_owner_email` | string\[] | 1–200 items | |
| format: email | Latest opportunity owner's email. | | |
| `crm_account_owner_name` | string\[] | 1–200 items | |
| max length 500 | CRM account owner's name (values from GET /fields?object=account). | | |
| `crm_account_owner_email` | string\[] | 1–200 items | |
| format: email | CRM account owner's email. | | |
| `crm_latest_opp_date_within_days` | integer | 1–3650 | Latest opportunity created or closed within the last N days. |
| `crm_latest_opp_date_older_than_days` | integer | 1–3650 | Latest opportunity created or closed more than N days ago. |
| `crm_latest_opp_date_after` | string | — | Latest opportunity created or closed on or after this date. |
| `crm_latest_opp_date_before` | string | — | Latest opportunity created or closed on or before this date. |
| `outreach_status` | string\[] | `reached_out``replied``opportunity_created``not_reached_out``reached_out_after_signal``replied_after_signal``opportunity_created_after_signal` | |
| 1–200 items | Where outreach stands. \*\_after\_signal values count only outreach after the first signal. | | |
| `outreach_attribution` | string\[] | `direct_reply``driven``assisted``detected``competitive_deal``not_attributed` | |
| 1–200 items | Attribution verdict. | | |
| `preset` | string | `pilot``advertising``capacity_based_outbound``sell_now``competitor_aware_tam``customers_at_risk``competitive_deals` | A prebuilt view of the table. CRM presets replace crm\_latest\_opp\_stage with their own rule. |
| `crm_custom_fields` | map of string → string\[] | — | Custom CRM fields, as crm\_custom\_fields\[\<crm>:\<object>:\<field>]=\<value> (e.g. crm\_custom\_fields\[hubspot:company:Tier]=A). Fields AND together; values of one field OR. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.