Cofounder

CRM

Track the companies, people, and deals you sell to, log what happened with each, and find new prospects.

Every company gets a built-in CRM that your agent keeps up to date: the companies you sell to, the people there, your deals, and a log of every call, email, meeting, and note. Your agent also tracks follow-ups, finds new prospects, and books meetings.

What's in Your CRM

  • Accounts are companies.
  • Contacts are people.
  • Opportunities are deals. They sit in your pipeline.
  • Activity is the log of what already happened: notes, emails, calls, meetings, and finished tasks.
  • Commitments are follow-ups still to do.
  • Relationships record who knows whom and where people work.

Ask your agent for the overall picture, or a question like "what's going on with Acme?". It finds the account and reads it with its linked contacts, deals, follow-ups, and activity. On MCP, your agent can open the CRM in the company app with company_app_open and view=contacts.

The older list tools for accounts, contacts, opportunities, and activity are replaced. If your MCP connection still shows them, refresh it.

Your Pipeline

Deals move through stages in a pipeline. Each deal's status is open, won, or lost, set separately from its stage. For counts and totals, your agent asks the CRM directly instead of adding up deals by hand, with amounts grouped by currency. A deal's notes hold up to 100,000 characters.

The Sales pipeline is the default, and every deal in it belongs to an account. Add custom pipelines for relationships beyond sales, like advisors or investors. A deal in a custom pipeline can link a person with no account, and one person can be in several deals.

  • A pipeline's key can't change. Stage labels, descriptions, and order can.
  • You can't remove a stage that still has deals, so move them first.
  • Archiving a pipeline keeps its deals readable but stops new ones joining.
  • The web app's Sales editors only edit Sales. Use the CLI for custom stages.
  • Before deleting the last contact on a deal with no account, reassign or delete that deal.

Custom fields add your own data to accounts, contacts, and deals. Types are text, number, true/false, date, select, and multi-select. A field's key can't change. To change its type, clear every value first, and keep any option that records still use. Archived fields stay readable but can't be set.

cofounder crm schema describe shows your pipelines and fields, including archived ones. Create them with cofounder crm pipelines create and cofounder crm fields create, and change them with cofounder crm pipelines update and cofounder crm fields update:

cofounder crm pipelines create --key advisors --label Advisors \
  --stages '[{"key":"met","label":"Met"},{"key":"joined","label":"Joined"}]'
cofounder crm fields create --object-type contact --key interest --label Interest \
  --value-type select --option advice --option investment

Keeping Records Clean

Your agent saves changes in batches of up to 25, all or nothing. It won't overwrite an edit someone made since it last read the record.

People are matched by exact email, phone, LinkedIn profile, or other account id. Names and company domains never merge people. A phone number shared by several people matches all of them, and lookups report it as ambiguous instead of picking one. Identities your agent adds are recorded as its claim. Only trusted connected services mark one as verified. Your agent can also tie an account to a known company profile.

A new person or account with the same name as an existing one is flagged as a possible duplicate. Records are never merged automatically.

Merging and deleting are permanent, with no undo. Merge only records you've decided are the same.

  • Merging contacts moves activity, deals, follow-ups, and relationships to the contact you keep and deletes the other. Do-not-contact stays set if either had it. The kept contact's field values win, and its empty fields are filled from the other.
  • Merging accounts moves contacts, deals, activity, relationships, and follow-ups to the account you keep. The removed account's domain is added to the kept account's website URLs, and the kept account's filled-in fields win.
  • Deleting a person or account removes their relationships. A follow-up that loses its last linked record is canceled, and its history stays.

Follow-Ups

A commitment is work still to do, linked to at least one contact, account, or deal. It's open, waiting, done, or canceled. It belongs to whoever created it unless it's assigned to another company member. Activity only records the past, so reminders and follow-ups are commitments with a due date.

When several agents or people share the work, an agent claims a follow-up before starting it, so two don't do the same thing. A claim lasts five minutes by default, and up to 15. It doesn't send anything or approve outreach.

Relationships

Your agent records how people know each other and where they work. Direction matters: Alice introduced_by Bob means Bob introduced Alice. knows connects two people, and works_at connects a person to an account. Being at the same meeting doesn't count.

Each relationship is backed by evidence: a web link, an activity, a Library file, or a research report, with when it was observed. A source label says where a claim came from. It doesn't verify it. Archiving a relationship needs a managed CRM.

Read Email Threads

New email activity links to its email thread, and every company member can read that thread with its messages and attachments. Older activity and other channels have no thread. This doesn't open the rest of the company's mailboxes.

Fill In Details

Enriching looks up company or person data from a paid source and fills in what it finds. Lookups can cost money, and you can't set a spending cap. A lookup is billed whenever it runs, even when it finds nothing or changes nothing.

  • Saving an account, even with a domain, doesn't start a lookup from MCP, the CLI, or the API. Your agent asks for one explicitly. Saves from the older web app still enrich automatically.
  • A lookup takes a minute or more. Retrying the same lookup doesn't charge twice.
  • Complete records are skipped unless your agent forces a refresh.
  • Values someone typed in are kept, even on a forced refresh. Editing a field, even to the same value, protects it from future lookups.
  • Enrichment never adds marketing consent or verifies an identity. If the email it finds conflicts with the contact's, nothing is applied.

Capture Site Forms

Add a waitlist or contact form to a marketing or product site, then connect it:

cofounder company forms setup --app-binding-id <uuid>

Setup creates a key that only that site can use, and adds COFOUNDER_FORMS_API_KEY and COFOUNDER_FORMS_SUBMIT_URL to its Production environment. The form posts from the site's server, so the key never reaches the browser. Each submission becomes a contact, matched by email and never duplicated, with a note. Marketing consent is saved only when the visitor ticks the unchecked opt-in box.

For local development, run cofounder company api-keys create --scope forms:submit --app-binding-id <uuid> (MCP: company_api_keys_create with the same scope and app) and put the value in .env.local.

Sync From Your Calendar

Calendar sync creates accounts, contacts, and activity from the meetings on a connected calendar. Your agent can preview what it would create without saving anything.

  • It looks back 30 days by default.
  • Attendees on personal email domains are skipped unless you include them.
  • Only basic event details are read unless you turn on full visibility.
  • You can turn it off for all calendars or just some.

Book Meetings

Your agent books calls with your contacts on a company member's Google Calendar. The host must have connected Google Calendar. Your agent sees free times only, never event details, in a window of up to 31 days.

Your agent holds the times it offers so nobody else books them. A hold doesn't touch anyone's calendar and expires after 15 minutes by default, at most an hour. It's refused unless your agent has already reached out to that contact. Confirming emails a real invite to the contact, with a Google Meet link. Contacts marked do-not-contact are refused. Canceling deletes the event, and the contact gets a cancellation email. Meetings covers each step.

Find New Prospects

Your agent finds companies or people that match your targeting, like US dental clinics, then imports the ones you want:

  1. Preview checks the targeting and estimates the cost, without spending anything.
  2. The search spends up to the limit you set and runs in the background.
  3. You pick the candidates to import as accounts or contacts. Nothing is searched again. People without a LinkedIn profile come in as unverified contacts.

Prospect searches are research jobs. See Research.

Search for People

People search spends money and answers in one reply, usually within 5 to 20 seconds. It's refused before it runs if the estimate is above your limit. Filtering by company stage adds one company lookup per employer.

Nobody is dropped. Every person gets a pass, fail, or unknown for each filter. unknown means the data was missing, never a pass. Judging fit is up to you. Your agent saves the people you want as contacts. See People.

Coordinate Outreach Across Agents

When several agents or people reach out for the same company, an agent claims a contact before writing to them, so two senders don't contact the same person at once. Some companies don't have this yet. Then claims are refused, and ordinary sends follow the company's usual rules.

  • A claim lasts from 30 seconds to 15 minutes. It belongs to the signed-in user and API key that made it. A signed-in session and an API key, or two API keys, count as different holders.
  • Admins can end someone else's claim. That's logged.
  • A claim follows a contact's known emails and phone numbers across aliases and duplicate records. A shared phone number covers all its contacts. Names and domains don't prove two records are the same person, so a claim can't cover addresses nobody knows about.

What Gets Blocked

Company mailbox sends reserve the recipient before sending, even with no claim. While a contact is claimed, only the holder can send to them. Campaigns reserve their whole audience together and are refused for anyone under a claim.

Before any send, Cofounder checks do-not-contact, email suppression, and current marketing consent for that exact address. Duplicates with conflicting consent block the batch.

  • Outreach, including company mailbox sends and campaign tests, is blocked by any suppression.
  • Transactional app email can still go to addresses that opted out or complained about a bulk campaign or test send. Other complaints, undeliverable addresses, and do-not-contact still block it.

A send with an unclear result blocks any further send to that person. Your agent checks what happened before reaching out again. You can't override this, and turning coordination off doesn't clear it.

This covers the company mailbox and campaigns. It doesn't cover your app's transactional email, sign-in email, personal mailboxes, social DMs, or calls, and it doesn't add quiet hours or approval rules.

Commands

MCPCLIAPI

Meetings and people search, covered in their own guides:

MCPCLIAPI