Pulse
All documents
Pulse

The CRM with a working agent inside. It reads, it learns how you sell, and it moves.

PRODUCT

How it worksSetupProductPricingQuestionsSign in

LEGAL

PrivacyTermsDPASub-processors

Built on the open-source CRM by Comp AI, MIT licensed.

The legal documents above are published drafts.

ON THIS PAGE

  • 1. What this list is, and what it is not
  • 2. Architecture, because it changes what "sub-processor" means here
  • 3. Sub-processors always in the path
  • 3.1 Model providers — the part that needs a decision
  • 3.2 PostHog — why it is listed, and why it processes no personal data
  • 4. Sub-processors used only when a capability is enabled
  • 4.1 A warning we are obliged to repeat about LinkedIn
  • 5. Named in the codebase, receiving nothing
  • 6. Changes to this list
  • 7. Contact

Sub-processors

DRAFT — NOT LEGAL ADVICE, NOT IN FORCE. This document was prepared by an AI assistant from this repository's source code. It has not been reviewed by a lawyer. It must be reviewed by counsel qualified in every jurisdiction in which the Service is offered before it is published or relied on. Nothing here is a commitment by anyone.

Document version: draft-1 · Prepared: 2026-08-07 · Status: unreviewed

Terms used here have the meanings given in the . "We", "us" and "the Service" mean [LEGAL ENTITY NAME]'s hosted offering.

1. What this list is, and what it is not

This is the list of third parties that may Process Customer Personal Data on our behalf when you use the hosted Service.

It does not apply to a self-hosted install. The software is MIT licensed. If you run it yourself, you choose your own database host, your own model provider and your own optional API keys, and you — not us — are responsible for listing them to your own customers. See §2.

Two lists follow, and the split is deliberate:

  • §3 — Always in the path. Every hosted deployment uses these.
  • §4 — Only if enabled. A capability the Customer or we switch on. A missing key removes the capability; it never fails silently.

§5 lists third parties named in the codebase that are not built and receive nothing. They are listed so that reading .env.example does not create a false impression.

2. Architecture, because it changes what "sub-processor" means here

The hosted Service is deployed one instance per Customer, each with its own Postgres database. There is no shared multi-tenant datastore. Consequently:

  • The database host below Processes one Customer's data per database.
  • We cannot cross-reference or aggregate one Customer's records with another's, because they are not in the same database.

This reflects the architecture recorded in docs/plan/multi-tenancy.md §B.9 and docs/product/connectors.md §2 as at the date above. If the hosted Service moves to a shared multi-tenant database, this document must be reissued and notice given under §6.

3. Sub-processors always in the path

Sub-processorFunctionPersonal Data it may ProcessProcessing location
[HOSTING PROVIDER — e.g. Vercel Inc.]Application hosting for the web app, API and agent; request routing; runtime logsAnything present in a request or response: account identifiers, IP addresses, and CRM record content in transit[REGION]
[DATABASE PROVIDER — e.g. Neon, Supabase, or self-managed]Managed Postgres — the primary datastoreAll Customer Personal Data: contacts, companies, deals, activities, email threads and bodies, calendar events and attendees, agent facts and briefs, users and sessions[REGION]
Google LLC / Google Ireland Ltd(a) OAuth sign-in; (b) Gmail and Google Calendar read APIsAuthenticating user's identity; mailbox thread content and recipients; calendar events and attendee lists — only from mailboxes the Customer's users have connectedGoogle's global infrastructure
[AI GATEWAY — e.g. Vercel AI Gateway]Routes agent model calls to the selected model providerContact names, business email addresses, job titles, employers, company web content, call and meeting notes, and the user's own promptDepends on route
[MODEL PROVIDER(S) — see §3.1]InferenceAs aboveDepends on provider
[EMAIL DELIVERY PROVIDER]Transactional email — invitations, sign-in and account noticesRecipient email address, display name, message content[REGION]
PostHog, Inc.Anonymous product telemetry (see §3.2)No personal data as configured[REGION — us.posthog.com or eu.posthog.com]

3.1 Model providers — the part that needs a decision

Which model runs the agent is a runtime setting, not a fixed dependency. It is stored in AppSetting.agentModelId and chosen by a workspace administrator from a catalogue fetched live from the gateway.

That means the identity of the company receiving contact names, call notes and LLM-written briefs about named individuals can change without a deployment.

Two ways to resolve this, and the Customer must be told which applies:

  • Option A — restricted catalogue. We fix the selectable models to a named list, publish those providers here, and treat any addition as a change under §6. Recommended.
  • Option B — Customer choice. The Customer selects any model in the gateway catalogue and thereby appoints that provider as a Sub-processor themselves. Our §6 notice duty cannot extend to a choice we do not make.

[DECISION REQUIRED — A or B. This draft assumes Option A and leaves the provider list to be filled once the catalogue is fixed.]

Model training. Whether any provider uses inputs or outputs to train models is governed by that provider's own terms, not by this software. [VERIFY EACH PROVIDER'S CURRENT PUBLISHED POSITION AND CITE IT HERE BEFORE PUBLICATION — see docs/legal/research.md §4.] Do not state a blanket "we do not train on your data" position: it is not ours to give.

Agent session state. The agent framework (eve) persists conversation continuation state outside the application database. [UNRESOLVED — establish where that state is stored and under whose terms, and list the operator here before publication.]

3.2 PostHog — why it is listed, and why it processes no personal data

docs/telemetry.md is the complete account and the code matches it. Once a day the API sends counts keyed to a random install UUID:

  • identify() is never called and no person profile is ever created ($process_person_profile: false).
  • Every event sets $ip: null, geoip is disabled, and the receiving project has anonymize_ips enabled — three independent measures.
  • Contact counts are sent in bands, not exact numbers. No name, address, company, subject line, deal amount, prompt or API key is ever sent.
  • An email address typed into the early-access form is never a property of the telemetry event; it goes only to the waitlist endpoint.
  • Landing-page analytics load only on two named hostnames; on any other host the SDK is never fetched at all.
  • Disabled entirely by CRM_TELEMETRY_DISABLED=1 or DO_NOT_TRACK=1, and during test runs.

It is listed for completeness and because it is a third party in the deployment, not because it receives Customer Personal Data.

4. Sub-processors used only when a capability is enabled

Each of these is off unless an API key is configured. A missing key removes the capability and never causes an error.

Sub-processorFunctionPersonal Data it receivesEnabled by
FirecrawlFetches and extracts a company's public website; the result is written to CompanyEnrichment and to an activity recordA company domain. Extracted content may contain named individuals published on that siteAPI key from FIRECRAWL_API_KEY, or stored in AppSetting.firecrawlApiKey
Perplexity AI, Inc.Web presence and recent news about a named individual before a callA named individual's name and employerPERPLEXITY_API_KEY
RapidAPI / LinkDAPILinkedIn profile lookup — name, title, employer, tenureA named individual's LinkedIn identifier or nameRAPIDAPI_KEY
GitHub, Inc.Matching a contact to a public GitHub profile; the token only raises the rate limitA public username or email hashGITHUB_TOKEN
[BLOB STORAGE — e.g. Vercel Blob]Stores mirrored company logos, favicons and profile photographs of named individualsPhotographs of identified natural persons; company brand imagesBLOB_READ_WRITE_TOKEN
[REDIS PROVIDER]Shared cacheCached query results, which may include record contentREDIS_URL
Functional Software, Inc. (Sentry)Error tracking for the web app, API and agent — exception messages, stack traces, the request path and method, and the logger contextNo personal data as configured: sendDefaultPii is off in all three services, the API never logs headers, bodies or query strings, and no identifier of a user or contact is attached to an eventSENTRY_DSN
[WAITLIST ENDPOINT OPERATOR]Receives early-access sign-ups from the marketing siteAn email address, submitted with an explicit consent flagWAITLIST_WEBHOOK_URL

4.1 A warning we are obliged to repeat about LinkedIn

The LinkedIn capability uses a third-party scraping API, not an official LinkedIn API. .env.example states the reason: there is no official LinkedIn or Sales Navigator API available to obtain, and LinkedIn's terms prohibit storing their content obtained outside their own APIs, including indirectly.

It is off by default. Whether enabling it is acceptable is a decision for the party operating the install, and the place that risk on the Customer. We do not enable it on a Customer's behalf without a written instruction.

5. Named in the codebase, receiving nothing

.env.example contains a section headed "Scaffolding: connectors that are not built", which opens by stating that everything above that line is read by some code and nothing below it is. As at the date of this document these are:

Zoho CRM · HubSpot · Salesforce · Gong · Apollo · Slack · Fireflies · PostHog (as an MCP data source, distinct from the telemetry use in §3.2)

Setting any of these variables today changes nothing: no code reads them, no capability appears, and the integrations page says so and disables its own connect action.

They are listed here so that a reader who greps the repository and finds ZOHO_CLIENT_ID does not conclude that Zoho is a sub-processor. Each becomes one on the day it is built, and this document must be updated with notice under §6 before that connector is shipped to any Customer.

6. Changes to this list

We will give Customers [NOTICE PERIOD — 30 days recommended] written notice before adding a new Sub-processor or replacing an existing one, by [NOTIFICATION MECHANISM — e.g. email to the workspace owner and an RSS feed on this page].

A Customer may object on reasonable data-protection grounds within [OBJECTION WINDOW — 15 days recommended]. If we cannot make the change avoidable for that Customer, the Customer may terminate the affected part of the Service without penalty and receive a pro-rata refund. This mirrors DPA §[X].

Emergency replacement of a Sub-processor for security or continuity reasons may happen with shorter notice; we will notify [TIMEFRAME] afterwards.

Subscribe to changes: [MECHANISM].

7. Contact

Entity[LEGAL ENTITY NAME]
Registered address[REGISTERED ADDRESS]
Privacy contact[PRIVACY EMAIL]
Grievance Officer (India, DPDP s.13)[GRIEVANCE OFFICER NAME AND CONTACT]
Data Protection Officer[DPO — or a statement that none is required]
EU representative (GDPR Art 27)[EU REPRESENTATIVE — or the basis for exemption]
UK representative[UK REPRESENTATIVE — or the basis for exemption]