Skip to main content
Every connector is governed by a data policy that decides what leaves the source and what lands in a container. The policy is enforced twice — once when Conare configures the upstream sync (source-side field disables, obfuscation, row filters, cutoff) and again in the ingest mapper as rows stream through — so a source that silently ignores an upstream knob still never lands an excluded value in memory. Six connectors are governed by the launch policy today: Gmail, Slack, Affinity, Salesforce, HubSpot, and Attio.

Global guarantees

These apply to every connector under the policy:
  • 24-month backfill cap. Activity older than 24 months (emails, messages, CRM activities, tasks, notes, engagements) is not synced.
  • Evergreen CRM entities are always included. Current-state CRM records — accounts, contacts, companies, organizations, persons/people, opportunities, deals, leads, lists, list_entries, field_values, pipelines, products — sync in full regardless of age. A 5-year-old account still lands. Only their activity streams are capped.
  • Credentials and government/financial IDs are stripped at the source. Fields matching credential/secret patterns (password, secret, api_key, token, client_secret, private_key, access_key) and government/financial-ID patterns (ssn, social_security, tax_id, ein, vat, iban, swift/bic, routing_number, credit_card, cvv/cvc, passport, national_id, drivers_license, aadhaar, bank_account, bank_number) are disabled before rows leave the source system.
  • Deal amounts and revenue are kept. Business-critical numeric fields (amount, annual_revenue, account_number as a CRM identifier) are explicitly preserved — the exclusion list targets secrets and personally identifying financial IDs, not commercial data.

Per-connector policy

Gmail

Excluded labels are filtered at the source with an ArrayDoesNotContain row filter on labelIds, so promotional and social mail never lands in the blob to begin with. The 24-month cap is re-applied in the ingest mapper because the Gmail source-side cutoff is best-effort.

Slack

Slack respects the per-entry channel allowlist the end user picks during the consent flow. Channels not on the allowlist are excluded from the sync — pass the desired channel ids as collections on the connect link or on POST /api/v1/connectors/sync.

Affinity, Salesforce, HubSpot, Attio (CRM)

Requesting an excluded collection explicitly (e.g. "collections": ["attachments"]) fails loud with a 400 — attachments and audit trails are refused, not silently dropped. Unrecognized schemas default to capped, never to uncapped, so a new activity-like object added by the CRM vendor won’t backfill unbounded.

Backfill: partner path vs. dashboard

The 24-month cap is enforced on the partner path — end users your Integration connects through the hosted OAuth link (POST /api/v1/connectors/link). Personal accounts connected directly in the Conare dashboard sync their full history; the cap applies to partner-minted connections only.

Working with the policy

On the collections endpoint. GET /api/v1/connectors/{type}/collections never lists policy-excluded collections — the ids you get back are the ids you’re allowed to request.
On the connect link. Pass collections to narrow further. For Slack this scopes to channels; for CRM sources it scopes to entity schemas. Omit it to sync every non-excluded collection.
Requesting a policy-excluded id returns a 400:
On field-level exclusions. Credential and government/financial-ID fields are matched by segment-bounded name patterns against the source’s field ids and their normalized snake-case output names — the policy is a convention across CRM schemas, not a per-CRM list, so a new custom field named passport_number__c on Salesforce is excluded automatically.