The complete outbound studio
Sendie is a full-stack outbound platform: a built-in lead CRM with 50M+ B2B prospects, AI-personalised email generation in 100+ languages, built-in email verification and profile enrichment, multi-step sequences with reply detection, and a live send dashboard — all from one browser tab. No stitching tools together, no Apollo + Hunter + Lemlist + Smartlead bill, no spreadsheets in the middle.
Build your list, verify and enrich it, generate the email body and 3 subject variants with AI that matches your input language, queue thousands of personalised sends from your own SMTP, and watch every delivery, bounce, and reply happen in real time. The companion mobile app (coming soon to iPhone and Android) lets you monitor and react from anywhere.
People
A built-in contact database. Browse prospects, slice them by title, industry, location, and company size, then save the ones you like to a List ready to push into Create.
Browsing & filtering
The People pane shows 25 contacts per page. Use the filter sidebar on the left to narrow the dataset:
- Job title — typeahead with multi-select chips. Type "vp" and you can pick "VP Sales", "VP Engineering", etc. in one go.
- Industry — SaaS, Fintech, AI / ML, Healthcare, and more.
- Location — country and major metros.
- Company size — 1–10, 11–50, 51–200, 201–1000, 1001+.
Filters combine with AND logic — every chip you add narrows the result set further. Hit the Clear all chip to reset.
Saved views
Three stat tiles at the top of the filter sidebar act as quick toggles between views:
- All — the full dataset (filters still apply).
- Filtered — same as All today; reserved for a future "Net New" diff.
- Saved — only people present in at least one of your Lists. Useful for reviewing who you've already targeted.
Selecting & bulk actions
Click any row's checkbox to select a single contact, or use Select all at the column header to grab the whole filtered set. Selection persists across pages — pick 12 here, scroll to page 3, pick 8 more, and the count chip at the top shows 20 ready to act on.
With contacts selected, the action bar reveals:
- + Add to List — drop into an existing List or spin up a new one.
- ↗ Send to Create — populate the Create wizard's data source directly with this selection (skip the CSV step).
{{Name}}, {{Title}}, {{Company}}, {{Industry}}, and {{Location}}. Drop a List into Create and these tags resolve per-row automatically.Companies
Browse organisations rather than individuals. Filter by industry, headcount, and location to build an account list, then drill into a company to see the people inside.
Filtering
The Companies pane uses the same filter UX as People — typeahead chips for industry, size, and location. Click a row to switch to People scoped to that company's domain.
People count per company
Every company shows a small "👤 N people" badge so you can see at a glance how much surface area there is to work with. Click the badge to jump to People filtered to that company.
Lists
A List is a saved selection of People — your audience for a future campaign. Lists carry their merge data straight into Create so you never have to re-upload a CSV for the same group twice.
Creating a List
Three ways:
- From People — select contacts (any combination, across pages), hit + Add to List, give it a name.
- From a template — the Lists pane ships with five pre-built templates that auto-filter the People dataset: Tech Founders, VP Sales · Mid-market, Senior Engineers, Marketing Leaders, and Talent & People. One click materialises the matching contacts into a new List.
- From Companies — saving a company selection captures the people inside those companies under your current filters.
Managing Lists
The Lists pane shows every List with name, member count, and a description. Actions per row:
- 👁 View members — opens a read-only preview modal so you can scan who's inside before sending.
- ✎ Rename — change the name and description.
- ↗ Use in Create — load the List as the Create wizard's data source. Skips the CSV step entirely.
- 🗑 Delete — removes the List (members are not deleted from People, just unmapped from this List).
Lists in Create
Inside the Create wizard's Data Source card there's a List picker dropdown. Pick a List and the wizard reads its members directly — Email, Name, Title, Company, Industry all map automatically. No CSV upload, no column mapping prompts.
localStorage under sendie_lead_lists_v1, scoped to the signed-in user. Wiping browser data clears them. Server-side persistence is on the roadmap — until then, treat Lists as device-local for now.Verify & Enrich
Before you send to a list, run it through Verify & Enrich. Each address gets a deliverability status (Verified / Catch-all / Risky / Bounced / Unknown); flip the enrich toggle and you also get name / title / company / LinkedIn fields backfilled. Open the pane with the 4 shortcut from anywhere in the app, or click the 🔍 Verify & Enrich item in the left sidebar.
Why this matters
Every bounced email tells the receiving mail server "this sender isn't curating their list." Stack up enough bounces — even 2–3% on a single send — and Gmail / Outlook start routing your real outreach to spam folders. Verifying first keeps your sender reputation clean and your inbox rates up. Enriching at the same time means your {{Title}} and {{Company}} merge tags actually have data to substitute.
Free monthly quota
Every plan includes a free monthly verification quota — Free 200, Starter 2,500, Growth 10,000, Scale 50,000, Enterprise unlimited. The pane consumes from your quota first. Only after the quota's spent do verifications start drawing from your credit balance.
Over-quota pricing
When your free quota is exhausted, additional verifications cost 1 credit per 5 emails (so ~$0.006 effective at Starter rate). Partial bundles round up: 6 verifications past quota = 2 credits, 3 past = 1 credit. Cached results never cost anything regardless of quota state.
How it works
- Paste emails one-per-line, or upload a CSV with an
emailcolumn. Multiple separators are tolerated — commas, semicolons, newlines. - The pane previews how many addresses are unique and shows the cost split: "X from free quota + Y credits".
- Hit ✦ Verify list. Behind the scenes we run shape validation + role-mailbox detection + disposable-domain detection + MX checks (concurrently per unique domain — 1000 emails from 50 domains = ~50 lookups), and ambiguous addresses also get a real-time deliverability check via our verification provider.
- Results render in a table you can filter by status, search, and export.
Status meanings
- Verified — shape is valid, domain has MX records, not a known disposable / catch-all / role mailbox. Safe to send.
- Catch-all — domain accepts any local-part. Address is probably real but we can't confirm it; expect a small bounce risk.
- Risky — disposable provider (mailinator etc.) or role mailbox (info@, admin@, support@). Will likely send but rarely converts.
- Bounced — invalid shape OR no MX records. Don't send.
- Unknown — DNS lookup failed or the resolver is unavailable. Try again later.
Caching & cost
Every verification result is stored in your personal cache keyed by (user_id, email). Re-verifying the same address costs 0 credits AND consumes 0 quota, ever. This means:
- You can re-upload an old CSV without paying twice.
- Your verified-history table on the Verify pane re-populates instantly on every visit.
- If you delete a list and re-add it from somewhere else, the cache still applies.
- There's also a cross-user global cache — if another Sendie user verified the same address in the last 90 days, you get the result free (only 1 credit charged for the resolution, which feeds back into our shared deliverability data).
Exporting + next steps
The toolbar above the results table has three actions:
- ⬇ Export Verified — downloads a CSV of just the deliverable rows. The fastest way to get a clean list into Create.
- ⬇ Export All — downloads everything with the status column attached.
- + Save Verified to List — turns the Verified rows into a Leads List with one click. Useful when you're starting from a paste-only batch (no existing People rows to join against).
Create
The Create tab is the heart of Sendie. You bring a CSV of recipients, a subject line, and an email body; Sendie saves it as a campaign in the database and hands you off to Send, where each message is rendered per-recipient on the fly at dispatch time.
The workflow follows a three-step wizard:
{{tags}} for personalisation and click the tag chips to insert fields.Live Preview
The right panel shows a real-time preview of what the email will look like for each recipient. Use the ← → buttons (or arrow keys) to cycle through all rows in your CSV and verify personalisation before generating.
Start Row / End Row
Use Start Row and End Row to generate a subset of your CSV. This is useful for splitting large lists across multiple runs, or for resuming after a partial send. Sendie automatically saves your row position per file — see Row Bookmarks.
Stats Strip
After mapping your columns, a live stats bar shows Will Generate, Total, Dupes, Invalid, and Blocked counts — all updated in real time as you adjust filters.
Continue to Send
Clicking → Continue to Send saves the campaign (subject, body, recipients, filters) to the database and routes you straight to the Send pane, where your sending accounts live. No files are written, no ZIP is built — the campaign lives as a single row that Send will read at dispatch time and render per-recipient on the fly.
CSV & Column Mapping
Sendie accepts any UTF-8 CSV. The first row must be a header row. Only the Email column is required — all others are optional.
Auto-mapping
When you upload a CSV, Sendie fuzzy-matches your headers against known aliases. For example, a column named email_address, mail, or Email will all auto-map to the Email field. A confirmation dialog shows which columns were matched.
Supported field mappings
| Field | Required | Auto-detected aliases |
|---|---|---|
| Required | email, mail, email_address, emailaddress | |
| Name | Optional | name, firstname, first_name, fname, fullname |
| Job Title | Optional | jobtitle, title, job, role, position |
| Company | Optional | company, companyname, org, organisation, organization |
{{LinkedIn}}, {{City}}, {{Revenue}}.Validation
Click 🔎 Validate in the mapping card to run a pre-generation check that verifies email column mapping, finds missing template tags, and counts how many rows will be skipped due to invalid or missing emails.
Template Tags
Use {{double curly braces}} anywhere in your subject line or email body to insert dynamic values. Tags are resolved per-recipient at generation time.
CSV column tags
Any column header from your CSV can be used as a tag. Matching is fuzzy — spaces, underscores, and hyphens are ignored, and case doesn't matter.
# Examples Hi {{Name}}, I saw you work at {{Company}} as a {{JobTitle}}. Your contact email is {{email}}.
Special tags
| Tag | Value | Notes |
|---|---|---|
| {{Today}} | Current date | e.g. 25/05/2026 |
| {{Weekday}} | Day of the week | e.g. Monday |
| {{Year}} | Current year | e.g. 2026 |
| {{Time}} | Current time | e.g. 9:30 AM |
| {{SenderFirstName}} | Sender's first name | Extracted from the sender email address |
| {{CampaignID}} | Unique campaign identifier | Same value for all emails in one generation run |
| {{Unsubscribe}} | Unsubscribe link | Renders as a mailto: link to the sender's address |
| {{RecipientLogo}} | Recipient's company logo | Auto-fetched from their email domain. Use this in sign-offs. |
| {{SenderLogo}} | Your own company logo | Auto-fetched from the sender address's domain. Use sparingly — typically at the top of the body. |
| {{Logo}} | Legacy alias for {{RecipientLogo}} | Still works for backward compatibility. New templates should prefer {{RecipientLogo}} for clarity. |
| {{RandomN}} | Random N-digit number | e.g. {{Random6}} → 482910. N can be 1–12. |
Tag chips
After uploading a CSV (or loading a List), clickable tag chips appear above the subject line and email body editor. Click any chip to insert that tag at the cursor position. The 🖼 Logo chip inserts {{RecipientLogo}} which embeds the recipient's company logo.
Cultural Intelligence
Sendie isn't translation — it's context-aware outreach. Each prospect receives an email tuned to their language, culture, role, and buying context: the formality, opener, sign-off, and length conventions a native B2B copywriter would use. Measured results across markets:
- 61% higher reply rates in the USA
- 54% higher reply rates in Japan
- 52% higher reply rates in Brazil
- 49% higher reply rates in Germany
- 47% higher reply rates in France
How a recipient's language is detected
Before generating each personalised rewrite, Sendie runs a 5-signal cascade to figure out what language the recipient most likely reads in. The signals run in order and stop at the first confident match:
| Order | Signal | Confidence | Example |
|---|---|---|---|
| 1 | Explicit CSV column (language / preferred_lang) | High | language: de → German |
| 2 | Country / location field | High | location: "Berlin, Germany" → German |
| 3 | Email domain TLD | High | tanaka@hitachi.co.jp → Japanese |
| 4 | Phone country code | Medium | +33 … → French |
| 5 | Name pattern | Low | Last-resort heuristic — only used when no stronger signal exists. |
.com domain and a New York location gets an English email — French names don't override real-world signals.Cultural conventions applied per language
When the cascade confidently identifies a non-English recipient, Sendie injects market-specific B2B conventions into the AI prompt. These aren't translation rules — they're the things native B2B readers expect from a professional first-contact email.
| Language | Address form | Sign-off | Length | Notable conventions |
|---|---|---|---|---|
| 🇩🇪 German | Formal Sie (never du) | "Mit freundlichen Grüßen," | 80–110 words | "Sehr geehrte Frau / geehrter Herr {LastName}" opener. Concrete asks ("Hätten Sie 15 Minuten am Dienstag um 14 Uhr?"). No exclamation marks, no Anglicisms. |
| 🇫🇷 French | Formal vous | "Cordialement," | 70–100 words | French typography (non-breaking space before : ; ? !). Sharp openers — no "J'espère que vous allez bien" filler. Conditional polite asks ("Seriez-vous disponible…?"). |
| 🇪🇸 Spanish | usted (formal default) | "Un saludo," / "Cordialmente," | 110–150 words | Warmth is expected, not optional. Conditional asks ("¿Le interesaría…?"). No outdated "Vd." |
| 🇮🇹 Italian | Formal Lei (capitalised) | "Cordiali saluti," | 100–140 words | Relationship before transaction — one line of context before the ask. Avoid Anglicisms like "call", "feedback loop", "KPI dashboard". |
| 🇧🇷 Brazilian Portuguese | você (standard BR) | "Abraços," (warm) / "Atenciosamente," | 110–150 words | "Oi {FirstName}," opener. Reads like a friendly conversation. Brazilian verb forms (está, pode) — never European Portuguese forms. |
| 🇵🇹 European Portuguese | 3rd-person formal | "Com os melhores cumprimentos," | 90–130 words | Time-of-day openers ("Bom dia" / "Boa tarde"). More reserved than Brazilian. European verb forms only. |
| 🇯🇵 Japanese | Keigo (sonkeigo + kenjōgo) | "何卒よろしくお願い申し上げます。" | 200–280 words | Required opening apology ("突然のご連絡、誠に失礼いたします。"). {LastName}様 address — never さん or 殿 in cold outreach. Indirect asks ("もしご興味をお持ちいただけましたら…"). |
| 🇰🇷 Korean | Formal endings (-습니다, -십시오) | "감사합니다." | 150–200 words | Title-first address ("{LastName} 이사님," / "{LastName} 부장님,"). Apology for taking time. Honorific request forms. |
| 🇳🇱 Dutch | Formal u | "Met vriendelijke groet," | 80–110 words | Direct — point in sentence 1 or 2. No translated American clichés ("just touching base"). Direct asks without excessive hedging. |
| 🇹🇷 Turkish | Formal siz | "Saygılarımla," | 100–140 words | "Merhaba {FirstName} Bey," (men) / "Merhaba {FirstName} Hanım," (women). Respect markers expected. |
How to verify it before sending
On the Create pane, after ticking Personalise each email with AI, the Live Preview on the right doubles as the per-row AI preview surface. A 🌍 banner appears in the preview meta showing the detected language plus the signal that triggered it (e.g. "Written in 🇩🇪 German · email domain TLD"), with a small ? pill you can click for a one-line explanation of why that signal won. Step Prev / Next through every row before generating to confirm the cascade picked the right language for each recipient — Per-row results are cached, so revisiting a row is free.
Confidence levels & fallback
When no signal lands above medium confidence (e.g. a recipient with only a name and a gmail.com address), Sendie falls back to writing in the same language as your base body — detected automatically via a stop-word heuristic across English, French, German, Spanish, Italian, Portuguese, Dutch, Polish, Turkish, Japanese, Korean, Chinese, Arabic, Hebrew, Russian, and Nordic languages. So a French user writing in French still gets French outputs for unsignalled rows, instead of a hardcoded English default that would mismatch the rest of the campaign.
Two personalisation modes — Cascade vs Explicit
The per-recipient cascade is the default, but you can override it. After ticking Personalise each email with AI on the Create pane, two chips appear:
| Mode | What it does | When to use it |
|---|---|---|
| 🌍 Cascade (default) | Runs the 5-signal cascade per recipient. Each row gets its own detected language. Fallback uses your base body's language (heuristic detection). | You're sending into a mixed-language list and want each recipient to get their native language automatically. |
| 🎯 Explicit | Skips the cascade entirely. Every row gets the one language you pick from the dropdown (English, French, German, Spanish, Italian, Portuguese, Dutch, Japanese, Korean, Chinese, Russian, Turkish, Polish, Arabic, Hebrew, or Brazilian Portuguese specifically). | You know the list is monolingual ("all my prospects speak German B2B"), or you want to force a specific language regardless of TLD / location / phone signals. |
Languages without a cultural fragment yet
The cascade identifies 100+ languages but the cultural fragments cover the 10 markets above. For any other detected language (Polish, Czech, Hungarian, Arabic, Chinese, etc.), Sendie still writes in the recipient's language using a generic B2B convention prompt — just without the deep market-specific rules. More languages are added as we learn each market's B2B email norms.
Multilingual countries — city-level overrides
Some countries don't speak one language. Belgium has French, Dutch, and German communities. Switzerland has four official languages. Canada has English and French. Italy's South Tyrol is German-majority. Sendie handles these with city-level language overrides that take priority over the country default — so an "Antwerp" recipient gets Dutch even though Belgium's default is French, and a "Geneva" recipient gets French even though Switzerland's default is German.
| Country | Country default | City overrides |
|---|---|---|
| 🇧🇪 Belgium | French (Brussels, Wallonia) | → Dutch (Flemish): Antwerp, Ghent, Bruges, Leuven, Mechelen, Kortrijk, Hasselt, Oostende. → German: Eupen, Sankt Vith. |
| 🇨🇭 Switzerland | German (Zurich, Bern, Basel) | → French (Romandy): Geneva, Lausanne, Neuchâtel, Fribourg, Sion, Montreux, Vevey. → Italian (Ticino): Lugano, Bellinzona, Locarno. |
| 🇨🇦 Canada | English (Toronto, Vancouver, Ottawa) | → French (Quebec): Montreal, Quebec City, Gatineau, Sherbrooke, Trois-Rivières, Laval, Longueuil. |
| 🇮🇹 Italy | Italian | → German (South Tyrol): Bolzano, Bozen. |
| 🇲🇾 Malaysia | English (changed from Malay — B2B reality in KL, Penang, Johor Bahru is overwhelmingly English) | — |
language column in your CSV if you genuinely want the mother-tongue version.Title-aware tone — register adapted per seniority
Even with perfect cultural conventions, a strategic outcome-led email lands with the C-suite where the same words land flat with a frontline engineer. Sendie classifies each recipient's job title into a seniority tier and injects tier-specific tone guidance into the AI prompt alongside the cultural rules.
| Tier | Example titles | Tone guidance applied |
|---|---|---|
| C-level | CEO, CFO, CTO, COO, CMO, Chief X Officer, President, Founder, Co-Founder, Owner, Managing Director, MD | Strategic, peer-to-peer. Lead with business outcomes tied to revenue / growth / risk. Sub-100 words. One low-friction ask. No marketing fluff. |
| VP / SVP / EVP | VP Engineering, Vice President of Sales, SVP Product | Strategic but tactical. Lead with team-level / functional impact. Reference the function by name. 80–110 words. Ask tied to quarterly priorities. |
| Director / Head of | Director of Marketing, Head of Growth, Senior Director, Principal | Results-oriented and tactical. Lead with operational outcome (team velocity, conversion lift, fewer escalations). 90–120 words. Ask tied to their team's KPIs. |
| Manager / Lead | Engineering Manager, Senior Manager, Team Lead, Tech Lead | Direct, action-oriented. Lead with what changes for the team's day-to-day. Concrete benefits. 90–130 words. Clear ask aligned to a problem they own. |
| IC | Software Engineer, Data Analyst, UX Designer, Account Executive, Consultant, Specialist | Peer tone. Lead with how it improves their craft / workflow / output. Technical specificity where relevant. Soft ask ("happy to show you how it works"). 100–140 words. |
| Other / blank | Intern, Student, anything unclassified, or an empty Title column | No tier override — the default Tone you picked at campaign time applies. |
Advanced Filters
Click ⚙ Advanced filters in the mapping card to access optional recipient filtering rules applied before generation.
Send
The Send tab launches the campaign you set up in Create through your configured SMTP server. A live dashboard tracks progress in real time.
What Send actually does
When you hit launch, the server pulls the campaign by id, renders each recipient's subject and body in memory from the campaign row, and pipes that job list straight to the sender subprocess. Nothing touches disk — no .eml files, no staging folder, no ZIP. The recipient list is the campaign's recipient list.
Readiness checklist
Before launching, Sendie shows a checklist confirming: a campaign is loaded, SMTP host and port are set, and at least one sender account has a password. All three must be green before the Start button is enabled.
Live dashboard
Once sending starts, a ring progress chart and mini stat cards show Sent, Failed, Rate/min, and ETA — updated live via server-sent events. A collapsible log shows each send event as it happens.
Pre-flight check
Click 🔍 Run Checks before launching to scan the loaded campaign for common issues: missing passwords, malformed recipient addresses, unresolved merge tags, and sender / SMTP mismatches.
Monthly send cap
Every plan includes a generous monthly outbound send cap (Free 500 · Starter 15,000 · Growth 75,000 · Scale 300,000 · Enterprise unlimited). Sending is enforced at three layers so you can't accidentally exceed it:
- Pre-flight refuse — if you're already at cap when you click 🚀 Start Sending, the dispatch never starts. You'll see a modal with options to upgrade or wait for the next month's reset.
- Partial-warning modal — if the campaign's recipient count is bigger than the remaining cap, we surface a confirmation: "You have N sends left this month, but M recipients are in this campaign. We'll send the first N and stop." You can cancel, see plans, or confirm the partial send.
- Mid-flight kill switch — if a running send crosses the cap (e.g. you upgraded mid-batch and the cap math changes), the subprocess is cleanly terminated and a cap_reached SSE event surfaces the upgrade modal. Unfinished recipients wait for next month or upgrade.
The counter rolls automatically on the 1st of each calendar month — no cron, no surprise. Your send-status is reachable from any pane via /account/send-status (the topbar credit chip will show send remaining alongside credits in a future release).
SMTP Setup
Sendie sends through any standard SMTP server using SSL/TLS on port 465. Enter your SMTP host, port, and one or more email+password pairs.
SMTP credentials format
Enter one account per row in the format email : password. Use the 📋 Bulk paste option to paste multiple accounts at once. Passwords containing colons are supported — only the first colon is used as the separator.
sender1@company.com : apppassword1 sender2@company.com : apppassword2 sender3@company.com : apppassword3
Recommended providers & daily limits
| Provider | SMTP Host | Port | Est. daily limit |
|---|---|---|---|
| Zoho Mail | smtp.zoho.com | 465 | ~300/account/day |
| GMX.de | mail.gmx.net | 465 | ~250/account/day |
| Gmail | smtp.gmail.com | 465 | ~150/account/day |
Testing SMTP
Use the 🔌 Test SMTP Connections button to verify credentials without sending a real campaign. Optionally enter a test recipient address to confirm delivery end-to-end.
Pacing & concurrency
Configure Max Workers (parallel senders), Min/Max Delay between emails (seconds), and Daily Cap per account to stay within provider limits and avoid triggering spam filters.
Send Profiles
Send profiles save a complete sending configuration — SMTP server, credentials, pacing settings, and daily caps — as a reusable named preset.
Create a profile by clicking + Save as Profile in the Send tab after configuring your settings. Load it next time with one click instead of re-entering all credentials. Profiles are stored in the database and persist across sessions.
Sequences
A sequence is a scheduled, multi-step campaign. Step 1 fires at the chosen start time; follow-ups fire automatically after a per-step delay. Recipients who reply along the way are skipped from the remaining steps.
When to use sequences
Use a sequence whenever your outreach needs more than a single send to land. Common patterns:
- Cold outreach cadence — initial pitch, follow-up after 3 days, final nudge after 7.
- Event reminders — invite, week-of reminder, day-of reminder.
- Schedule-only — a 1-step sequence with no follow-ups is just a scheduled send.
Creating a sequence
Go to 🔁 Sequences in the sidebar and click + New Sequence. The modal asks for:
- Sequence name — internal label only (recipients never see it).
- Start date · time · timezone — when Step 1 fires. Timezone defaults to your browser but can be set per sequence.
- Recipient source — a saved List or an uploaded CSV. Merge tags (
{{Name}},{{Company}}, etc.) work the same as in Create. - Sender accounts & SMTP — same pre-fill from Create and Send Profiles. Distribution across senders applies.
- Step 1 — subject & body — the first email, written exactly like a Create campaign.
Adding follow-up steps
Click + Add follow-up step in the New Sequence modal to chain more emails. Each follow-up has its own:
- Delay — e.g. "3 days after Step 1", "7 days after Step 2". Delays are relative to the previous step's send for that recipient, not the sequence start.
- Subject & body — independent from earlier steps, but the same merge tags resolve.
Steps can be reordered or removed before you activate the sequence.
Reply detection
When a recipient replies to any step, all remaining steps for that recipient are automatically skipped. Replies are detected via IMAP polling on the sender accounts you configured. You can also mark a recipient as replied manually from the sequence detail modal — useful if a reply came in via a different channel.
Reviewing a running sequence
Click any sequence in the list to open its detail view. For each recipient you'll see:
- Which step they're currently on (Sent, Scheduled, Replied, Skipped).
- The next scheduled send time.
- Per-step status timestamps.
From the same view you can mark replied manually, skip a recipient entirely, or pause the whole sequence.
Template Library
Save your subject line and email body as a named template. Load any template back into the editor in one click.
Saving templates
Use Ctrl+S to save over the currently loaded template, or Ctrl+⇧+S to save as a new named template. The 💾 Save button in the Create toolbar does the same. Use the ▲ arrow next to Save for more options.
Loading templates
Click 📂 Load in the Create toolbar or press Ctrl+L. If both the current content and the template have a subject line, Sendie will ask which to keep. The body is always replaced.
Campaign History
Every campaign you create is automatically saved to history with subject, stats, sender list, and timestamp.
From the Campaign History tab you can:
- ↺ Reload — restore the campaign's settings back into the Create editor
- 📦 Export as ZIP — for review or archive only. Server renders every recipient's message in memory, packs the
.emlfiles into a ZIP, and streams the download. Use it to archive a snapshot of every message that was rendered, or to review merge-tag output before sending similar campaigns in future. This is not part of the send flow — Send dispatches the campaign directly from the database, it does not consume an exported ZIP. - 🗑 Delete — remove the history entry (does not affect the Emails Made lifetime counter)
Block List
The block list (suppression list) holds email addresses that are automatically excluded from every campaign you build and send.
Adding addresses
Add addresses manually — one per line — with a reason (Unsubscribe, Bounce, Spam Complaint, Manual, Other). Or bulk import via CSV: any column named email, or the first column if no header matches, is imported automatically.
How it works
As you build a campaign, every recipient email is checked against the block list. Matching addresses are counted in the Blocked column of the stats strip and dropped from the campaign's recipient list before Send ever sees it. No manual review is needed.
Managing the list
Search by email or reason from the Block List tab. Remove individual entries or clear all with 🗑 Delete All. Bulk import via CSV keeps your list in sync with your CRM or ESP unsubscribe exports.
Audit Log
A chronological record of every significant action in the Studio: logins, campaign generations, template saves, profile changes, and block list modifications.
Filter by keyword or time period (Today, Last 7 days, Last 30 days). The log is read-only and is stored server-side in the database. It persists indefinitely — clear the database manually if you need to remove old entries.
Row Bookmarks
Sendie automatically saves your Start Row and End Row position for each CSV file you work with, so you never lose your place in a large list.
How it works
Whenever you adjust Start Row or End Row, the values are saved to your browser's local storage keyed by the CSV filename. When you upload the same filename again in a future session, a blue banner appears offering to restore your previous row range with one click.
Managing bookmarks
Go to Account → 📍 CSV Row Bookmarks to see recent bookmarks, or click Manage Bookmarks to view and delete all saved positions.
Account & Stats
The Account tab shows your profile, live usage statistics, data export options, and password management.
Account Stats
| Stat | What it counts |
|---|---|
| Templates | Saved templates in your library |
| Campaigns | Campaigns saved to history |
| Emails Made | Cumulative lifetime total of all emails ever queued for send — never decreases |
| Blocked | Total addresses in your block list |
| Send Profiles | Saved send configurations |
| Last Campaign | Timestamp of the most recently created campaign |
Data Export
Download your templates, campaign history, or block list as JSON at any time. Useful for backup or migration to another instance.
Change Password
Enter your current password and a new password (minimum 6 characters) and click Update Password. Passwords are stored as bcrypt hashes — they cannot be recovered if forgotten, but can be reset via the login screen.
Credits & Billing
Credits are Sendie's pay-per-action currency. They unlock verified email addresses for prospects in People and Companies. Every new account starts with 100 free credits — no card required.
How credits work
One credit balance, spent on whatever you need. The cost varies by action:
| Action | Cost |
|---|---|
| 👤 Lead unlock (email reveal) | 1 credit |
| 🎯 Enrichment (fill in title / company / LinkedIn) | 5 credits |
| ✨ AI-personalised email (per row) | 1 credit Standard · 2 credits Best |
| 📞 Phone reveal | 5 credits |
| 📬 Email verification (over quota) | 1 credit per 10 emails |
Email verifications draw from a separate free monthly quota first (Free 200, Starter 2,500, Growth 10,000, Scale 50,000). Credits only kick in for verifications once that quota's spent — at the bundle rate of 1 credit per 10 verifications. See the Verify & Enrich docs for details.
Once you've unlocked a contact's email, it stays unlocked for your account forever — no re-charging on re-render, re-add, or new session.
Topping up between subscriptions
Click the + button next to the credit chip in the topbar (or ✨ Get more credits on the Billing card) to open the top-up modal. Four fixed packs are available:
- 100 credits — $10 ($0.10/credit) · Quick top-up
- ★ 500 credits — $40 ($0.08/credit, save 20%) · Most popular
- 2,000 credits — $140 ($0.07/credit, save 30%) · Best value
- 10,000 credits — $600 ($0.06/credit, save 40%) · For a one-off campaign push
Need a different volume? The modal also has a Custom row — type any dollar amount or credit count and the per-credit rate auto-tiers to match the closest fixed pack. Minimum $5 / 50 credits.
Where to see your balance
- Topbar chip — the ✦ pill next to the search button shows your live balance from any pane. It pulses red when you're at 10 credits or fewer.
- Account → Billing & Credits card — the big number plus a usage breakdown, recent activity log, and (soon) payment methods.
- Avatar menu → 💳 Billing & Credits — one-click jump to the same Account card from anywhere.
Reading the usage breakdown
The Billing & Credits card groups every credit movement by reason:
- 🎁 Welcome bonus — your initial 100-credit grant.
- 👤 Email reveal · person — single 1-credit reveal from a People row.
- 👥 Bulk reveal · people — multi-credit charges from Add-to-List flows.
- 🏢 Email reveal · company — single 1-credit reveal from a Companies row.
- 🔄 Monthly refresh — paid plans (when Stripe lands) reset to the plan's monthly grant on each billing cycle.
Green amounts are grants (credits added). Red amounts are spends (credits removed). The recent activity log keeps the last 20 transactions for quick audit.
Insufficient credits
If a reveal action would take you below zero, the server rejects the request with a 402 Payment Required and the app shows a toast telling you exactly how many credits you need vs. how many you have. Nothing partial happens — either the full reveal goes through or nothing does.
Payment methods (coming with Stripe)
The Billing & Credits card has a placeholder where your card info will appear once Stripe billing is live. Until then, the only way to top up is to upgrade to a paid plan when it opens (use ✨ Upgrade in the topbar to join the waitlist for early access).
Keyboard Shortcuts
All shortcuts use Ctrl on Windows/Linux and ⌘ on Mac. Number keys and arrow keys only fire when you are not typing in an input field.
Actions
| Ctrl+K | Open global search — jump to a person, list, template, or campaign |
| Ctrl+O | Import CSV — opens the file picker on the Create pane |
| Ctrl+S | Save the current template (overwrites if one is loaded) |
| Ctrl+⇧+S | Save as a new named template |
| Ctrl+G | Continue to Send (save campaign & open Send pane) |
| Ctrl+L | Open Load Template dialog |
| Ctrl+/ | Open Help & Docs panel |
| Ctrl+⇧+? | Open the keyboard shortcuts cheatsheet |
| Esc | Close the active modal or Help panel |
| ← → | Navigate email preview rows (previous / next recipient) |
Navigation
| 1 | Go to People |
| 2 | Go to Companies |
| 3 | Go to Lists |
| 4 | Go to Verify & Enrich |
| 5 | Go to Create |
| 6 | Go to Send |
| 7 | Go to Sequences |
| 8 | Go to Templates |
| 9 | Go to Campaign History |
| 0 | Go to Account |
Block List has no keyboard shortcut — reach it via the sidebar or ⌘+K global search.
Data Export
Export all your Sendie data as JSON for backup, migration, or analysis.
| Export | Filename | Contents |
|---|---|---|
| 📄 Export Templates | sendie_templates.json | All saved template names, subjects, bodies, and sender configs |
| 📊 Export Campaigns | sendie_campaigns.json | Full campaign history with stats, timestamps, and sender distribution |
| 🚫 Export Block List | sendie_blocklist.json | All suppressed addresses with reason and date added |