Docs · setup guide
From sign-up to your first chain.
About 30 minutes of setup, once, then a few weeks of ramp while your new domains earn trust. Every value you need to paste is shown in the app; this page is the map.
1. Before you start
- A Microsoft 365 tenant where you're an admin (Exchange Online Plan 1 is about $4 a mailbox a month). Google Workspace is next.
- A credit card for one or two new domains (about $10 a year each).
- A list of people to email as a CSV, or an Apollo account if you'd like contacts found for you.
Inside the app, Get set up tracks every step below and tells you what's next. Your postal address goes in first: US law (CAN-SPAM) requires one in every cold email, and we put it in the footer for you.
2. Buy sending domains
Cold email never goes from your real domain. Buy a look-alike, such as getacme.com or tryacme.com next to acme.com, one or two per product, and point it at your real site so a curious prospect who types it lands somewhere real. Add each one under Domains.
3. Connect Microsoft 365
One app registration lets Keep Your Chain send and read on your sending mailboxes. In the Microsoft Entra admin center:
- Sign in to entra.microsoft.com as an admin of the tenant that holds your sending domains.
- Identity → Applications → App registrations → New registration. Name it "Keep Your Chain", single tenant, no redirect URL. Register.
- On the app's Overview page copy the Application (client) ID and Directory (tenant) ID into the fields here.
- API permissions → Add a permission → Microsoft Graph → Application permissions → tick Mail.ReadWrite and Mail.Send → Add. Then click "Grant admin consent".
- Certificates & secrets → New client secret → 24 months → Add. Copy the Value (not the ID) immediately; it is shown once.
- Optional but recommended: limit the app to your sending mailboxes with an access policy (see the Domains page → "Lock the app to these mailboxes").
Then paste the tenant ID, client ID and secret under Domains → Connect Microsoft 365 and press Save and test. The secret is stored encrypted and shown to no one, including us. If you set up with Claude, it fills in the two IDs and hands you a link; the secret is only ever typed into the app.
4. Add the DNS records
Add each sending domain to Microsoft 365 (admin center → Settings → Domains), then add the records the app shows for it: MX, SPF, two DKIM CNAMEs, DMARC and autodiscover, plus the redirect to your real site. Turn on DKIM signing in Microsoft Defender once the CNAMEs resolve. If your DNS is on Cloudflare, connect a Cloudflare DNS token under Integrations and the app adds the missing records in one click. The app checks every record and says exactly which one is off.
DMARC reports: set a mailbox you actually read under Settings → DMARC reports go to. If it's on a different domain, that domain must publish a small authorization record; the app shows it.
5. Add mailboxes
Create one licensed mailbox per person per sending domain in Microsoft 365, then add it under Domains. The app tests it, and the ramp starts by itself once DNS passes and a mailbox works. How many mailboxes and people you can add depends on your plan.
6. The ramp: plan on 30 days
A new mailbox sends at most 10 cold emails a day in its first week, 20 in its second, and 30 a day from then on. Follow-ups count toward the same limit. The app enforces this and you can only lower it. If bounces spike above 3% on a domain, its mailboxes drop to half pace until it recovers.
A warmup service (Warmup Inbox or Mailreach, about $25 a mailbox a month) on top for the first 2 to 4 weeks helps. Put together, give your domains at least 30 days before you judge results at full volume.
7. Bring a list
Import a CSV under People. Columns are matched by name: email, first name, last name, company, website, store domain and title. Any other column becomes a custom field you can use in your emails, such as an opener line you wrote for each person. Rows with a website and no email add just the company, ready for contact finding. With MillionVerifier connected, every address is checked before it can be emailed; with Apollo connected, you can find people at a company or discover new companies.
8. Write a sequence
Four short emails usually do it: a first email, two nudges and a graceful close. Step 1 has the subject; every later step is a reply in the same chain and gets "Re:" automatically. No links in the first two steps lands better. Before a sequence can go live it passes a set of checks (a working mailbox, passing DNS, your address in the footer, no unknown merge fields).
Merge fields
- {{first_name}} inserts a field; it prints nothing when the prospect has no value.
- {{first_name|there}} prints "there" when the value is missing. Use a fallback on every field in a greeting or subject.
- {{if competitor_app}}You run {{competitor_app}}.{{else}}No survey app on your store yet.{{end}} switches text on whether a field has a value. Blocks can nest.
- {{signature}} places the mailbox signature, so a PS can follow it; without it the signature goes at the end.
- Custom fields: any extra CSV column on import (say "opener") becomes {{opener}} for that prospect.
{{first_name}} | Prospect first name |
{{last_name}} | Prospect last name |
{{title}} | Prospect job title |
{{company}} | Company name |
{{store}} | Store website (acme.com) |
{{competitor_app}} | The app on their store that competes with this sequence's product |
{{apps}} | All detected apps, comma separated |
{{survey_app}} | Post-purchase survey app found on the store (Fairing, KnoCommerce…) |
{{reviews_app}} | Reviews app found (Okendo, Yotpo, Judge.me…) |
{{email_app}} | Email platform found (Klaviyo) |
{{sms_app}} | SMS app found (Attentive, Postscript) |
{{popup_app}} | Popup / list-capture app found (Privy, Justuno, Klaviyo forms…) |
{{subscriptions_app}} | Subscriptions app found (Recharge, Skio) |
{{loyalty_app}} | Loyalty app found (Smile.io, LoyaltyLion) |
{{tracking_app}} | Order-tracking app found (AfterShip, Malomo…) |
{{support_app}} | Support app found (Gorgias) |
{{sender_first}} | Your first name |
{{sender_name}} | Your full name |
{{product}} | Product this sequence sells |
{{day}} | Weekday name (Tuesday) |
{{signature}} | Where the mailbox signature goes (otherwise it is added at the end); lets a PS follow the sign-off |
9. What happens when someone writes back
- A person replies, from any address at the company: every sequence at that company stops, the thread lands in your inbox marked "needs reply", and your phone gets an alert with a drafted answer.
- Out of office: the sequence waits until they're back. No alert.
- "No" or "unsubscribe": the address goes on the suppression list and the company is marked do-not-contact.
- A bounce: that person stops.
- A helpdesk robot (ticket receipts, satisfaction surveys): stored, nothing changes.
- A redirect ("send partnership requests to partnerships@…"): that address stops and the one they pointed to is added as a prospect for you to enroll.
- An install of your app (through the install hook under Integrations): the company's sequences stop and it's marked installed.
You reply from your own mailbox on the chain's domain. If a teammate started the chain, they're copied and the thread says who picked it up.
10. Use it from Claude
Keep Your Chain works as a Claude connector, so you can set up, import, write sequences and triage replies by asking.
- In Claude: Settings → Connectors → Add custom connector.
- Name it Keep Your Chain and use the URL
https://app.keepyourchain.com/mcp. - Press Connect, sign in with your Keep Your Chain email, and press Allow.
Claude acts as you, inside your workspace, with the same rules the app enforces. It asks before anything that sends email, and it never asks for passwords, secrets or API keys in the chat: tools that need one return a link to the right form in the app. You can disconnect it any time under Settings.
Tool list
| Tool | What it does | Effect |
|---|---|---|
kyc_setup_status | Setup status Setup progress for the workspace: every setup step with done/not-done and why it matters, what is next, plus a short summary of the mail connection, domains and mailboxes. | Reads |
kyc_workspace_get | Get workspace The workspace (name, legal entity, postal address, time zone, goals from onboarding, settings), the connected person, and the team. | Reads |
kyc_workspace_update | Update workspace Updates workspace details: name, company name (optional) and postal address (required by law; shown in every email footer unless the signature already carries it; settings.footer_brand maps a product to the name shown before the address, e.g. | Changes |
kyc_team_invite | Invite a teammate Adds a teammate to the workspace and emails them a sign-in link. | Changes, uses an outside service |
kyc_connections_list | List mail connections Mail platform connections (Microsoft 365 tenants) with status and the tenant's onmicrosoft.com name. | Reads |
kyc_connection_microsoft_save | Connect Microsoft 365 Starts connecting a Microsoft 365 app registration. | Reads |
kyc_connection_test | Test mail connection Re-tests a mail platform connection and refreshes what it knows about the tenant. | Changes, uses an outside service |
kyc_domains_list | List domains Every domain with role (sending or primary), status, DNS check results per record, the exact records to add, health, ramp day and its mailboxes. | Reads |
kyc_domain_add | Add a domain Adds a domain. | Changes |
kyc_domain_update | Update a domain Updates a domain's product, redirect target, warmup partner note or role. | Changes |
kyc_domain_check | Check domain DNS Checks a domain's DNS right now (MX, SPF, both DKIM CNAMEs, DMARC, autodiscover, redirect) and records the result. | Changes, uses an outside service |
kyc_domain_cloudflare_add | Add DNS records in Cloudflare Creates the missing DNS records for a domain through the Cloudflare API, using the Cloudflare DNS token saved under Integrations. | Changes, uses an outside service |
kyc_domain_ramp | Start or reset the ramp Starts or resets the sending ramp for a domain (10 → 20 → 30 a day per mailbox over two weeks). | Changes |
kyc_domain_pause | Pause or resume a domain Pauses or resumes all sending from a domain. | Changes |
kyc_domain_access_policy | Get the mailbox access policy The PowerShell snippet that limits the Microsoft 365 app to the sending mailboxes only. | Reads |
kyc_senders_list | List mailboxes Every mailbox with owner, status, today's sends versus cap, and ramp day. | Reads |
kyc_sender_add | Add a mailbox Adds a mailbox on a domain and tests it against the mail platform. | Changes, uses an outside service |
kyc_sender_test | Test a mailbox Re-tests a mailbox against the mail platform. | Changes, uses an outside service |
kyc_sender_update | Update a mailbox Updates a mailbox: display name, signature, owner, a lower daily cap, or pause/resume. | Changes |
kyc_prospects_list | List prospects Prospects with company, state, verification and active enrollments, newest first. | Reads |
kyc_prospects_import | Import prospects Imports prospects from CSV text (up to 5,000 rows). | Changes, uses an outside service |
kyc_prospect_add | Add a prospect Adds one prospect by hand. | Changes |
kyc_prospect_update | Update a prospect Updates a prospect's name or title, or marks an unverified address as ok. | Changes |
kyc_prospect_verify | Verify an address Verifies one prospect's address with MillionVerifier. | Changes, uses an outside service |
kyc_companies_list | List companies Companies with state, detected storefront apps, storefront-scan status and prospect counts, most recently updated first. | Reads |
kyc_company_get | Get a company One company with its people, threads and detected apps. | Reads |
kyc_company_scan | Scan a storefront Scans a company's storefront for the apps it runs (survey, popup, tracking, reviews…) and the competitor for each product. | Changes, uses an outside service |
kyc_company_find_contacts | Find contacts (uses Apollo credits) Finds named people at a company through the Apollo integration (founders and marketing leads first) and adds up to `max` of them as prospects. | Changes, uses an outside service |
kyc_prospects_discover | Discover companies (Apollo) Finds new target companies and the best-fit person at each through Apollo, leaving out companies already in the workspace and suppressed domains. | Changes, uses an outside service |
kyc_companies_rescan | Queue storefront rescans Queues companies for a fresh storefront scan (all of them, or the ids given), for example after the scanner learns new app signatures. | Changes |
kyc_signals_list | List storefront signals Storefront changes the weekly rescans spotted, newest first: an app removed (confirmed by two scans at least three days apart) or newly added, with the product it bears on and its effect: pitch (a reason to reach out now, such as a survey or tracking app removed or a Meta Pixel added), hold (a reason to wait, such as a competing app just installed) or info. | Reads |
kyc_suppressions_list | List suppressions The suppression list (addresses and domains that must never be emailed). | Reads |
kyc_suppression_add | Suppress addresses or domains Adds addresses or whole domains to the suppression list. | Changes (can't undo) |
kyc_sequences_list | List sequences Sequences with status, steps and enrollment counts, plus how to write copy: the built-in merge fields, the custom fields found on this workspace's prospects (extra CSV columns), and the syntax for fallbacks ({{first_name|there}}), conditions ({{if x}}…{{else}}…{{end}}) and {{signature}}. | Reads |
kyc_sequence_get | Get a sequence One sequence with its steps, per-step stats and a page of its enrollments (most recently updated first; `limit` default 50, max 500, from `offset`). | Reads |
kyc_sequence_create | Create a sequence Creates a sequence. | Changes |
kyc_sequence_update | Replace a sequence Replaces a sequence's name, product, steps or settings. | Changes (can't undo) |
kyc_sequence_gates | Check sequence gates The checks a sequence must pass before it can be activated (mailbox ready, DNS passing, address in footer, no "Re:" on step 1…), each with pass/fail and what to fix. | Reads |
kyc_sequence_status | Activate, pause or draft a sequence Sets a sequence to active, paused or draft. | Sends email |
kyc_sequence_preview | Preview a sequence Renders every step of a sequence for a real prospect (or a sample one) with the mailbox it would send from and the footer. | Reads |
kyc_sequence_enroll | Enroll prospects (sends email) Enrolls prospects in an active sequence, or with dry_run shows exactly who would be enrolled, from which mailbox, and who is blocked and why (suppressed, already replied, unverified, several people at one company). | Sends email |
kyc_enrollment_action | Pause, resume or stop an enrollment Pauses, resumes or stops one enrollment. | Changes (can't undo) |
kyc_inbox_list | List inbox threads Threads in the shared inbox, a short summary each (the last message is clipped to 280 characters; kyc_thread_get has the rest). | Reads |
kyc_thread_get | Get a thread One thread: every message in order (theirs and ours) with the new text of each (quoted history removed), the prospect, the company, the enrollment and any saved drafts. | Reads |
kyc_thread_draft | Draft a reply with AI Asks the configured AI to draft a reply for a thread and saves it as a draft (nothing is sent). | Changes, uses an outside service |
kyc_thread_reply | Send a reply (sends email) Sends a real reply in the chain from the connected person's mailbox on the chain's domain. | Sends email |
kyc_thread_action | Close, snooze or assign a thread Acts on a thread: close, reopen, done (clears "needs reply"), snooze, or assign to a teammate. | Changes |
kyc_dashboard | Today at a glance Today at a glance: sends, replies, what needs a reply, domain health, ramp status. | Reads |
kyc_analytics | Analytics Sends, replies, bounces, unsubscribes and installs over a period, by day, by domain, by sequence and by step. | Reads |
kyc_alerts_list | List alerts Recent alerts (replies, bounces, same-company warnings, system notes) and the unread count. | Reads |
kyc_integrations_list | List integrations Every integration with what it is for, cost, signup steps, whether it is connected, and why it is recommended for this workspace. | Reads |
kyc_integration_save | Save integration settings Saves an integration's non-secret settings (a model name, a warmup provider note) and tests it. | Changes, uses an outside service |
kyc_integration_test | Test an integration Re-tests an integration. | Changes, uses an outside service |
kyc_webhooks_list | List webhooks Outbound webhooks (reply, install, bounce, unsubscribe, state_change) with delivery failures. | Reads |
kyc_webhook_add | Add a webhook Adds an outbound webhook. | Changes, uses an outside service |
11. Plans and billing
Starter ($29 a month: 2 people, 2 mailboxes), Growth ($79: 4 people, 6 mailboxes) and Scale ($149: 10 people, 15 mailboxes); annual billing is ten months for twelve. A card is required at sign-up and there's no trial: instead there's a 30-day money-back guarantee, so if it isn't for you, email [email protected] within 30 days of your first payment for a full refund. Change plans, update your card, download invoices or cancel under Settings → Plan & billing. See plans.
12. Your data
Export prospects, companies, enrollments, messages, suppressions and the activity log as CSV any time under Settings → Your data, or delete everything in the workspace from the same page. Details in the Privacy Policy and DPA. Questions: [email protected].