Freshness: Last reviewed 2026-05-20. Audience: see page title and Start Here path. Status: current unless marked archived or private.
Acquira CRM Internal Documentation Back to Home
Current Operating State

Use this guide first when you need the CRM setup explained without implementation detail.

The detailed health checks remain the audit trail. This page is the operator-facing summary for how the CRM works today, what guardrails are active, and what still needs attention.

Primary CRM

crm.acquira.co Production CRM for contacts, pipeline, inbox, calls, SMS, email, and campaigns.

Current Caveats

Duplicates, GitHub Actions, governance The main follow-ups are duplicate cleanup, manual-review duplicate groups, GitHub Actions billing/spending-limit recovery, advanced nested segment groups, and database governance follow-ups.

Executive Summary

Use this as the quick operating context before working in campaigns, inbox, contacts, or health checks.

#NameDescription
1CRM purposeAcquira CRM is the workspace for contacts, pipeline, 1:1 email, 1:1 SMS, calls, inbox, and campaigns.
2Current readinessProduction is usable with monitored caveats around duplicate cleanup, manual-review duplicate groups, GitHub Actions billing/spending-limit recovery, advanced nested segment groups, and database governance follow-ups.
3Campaign modelEmail campaigns use Resend. SMS campaigns use Twilio Marketing Messaging Service. Gmail remains for 1:1 email and inbox history.
4Main guardrailDo not bypass consent, unsubscribe, suppression, STOP/START, approval, scheduler lock, or manual pause rules.
5Documentation ruleThis internal operations guide is the operator-facing source. Health checks are audit history and escalation detail.

Workflow

The CRM flow from intake through outreach, campaign tracking, and reporting.

#NameDescription
1Lead intakeAirtable remains the upstream intake and source-metadata surface for new contact records.
2CRM syncAirtable contacts sync into CRM through webhook and scheduled fallback sync. CRM-created contacts can mirror back with CRM Contact ID.
3Contact workOperators use Contacts for search, grouped filters, location, owner, pipeline context, tasks, activity, email/SMS opt-in state, duplicates, merged-record indicators, and campaign history.
4Pipeline movementCompleted outbound email, SMS, or call activity can mark the related opportunity as Contacted.
51:1 emailGmail sends 1:1 email and logs outbound activity on the contact. Gmail inbox sync links shared-mailbox history to contacts.
61:1 SMSTwilio sends 1:1 SMS when the contact has a valid phone and active SMS opt-in. 1:1 SMS does not force STOP copy.
7Email campaignsResend sends campaign email and tracks delivery, open, click, bounce, suppression, and unsubscribe events.
8SMS campaignsTwilio Marketing Messaging Service sends, pauses, resumes, and tracks SMS campaigns.
9Inbound SMS complianceSTOP/START/HELP style replies are logged, update SMS opt-in state, and mirror linked consent changes back to Airtable.
10CallsTwilio Voice powers browser calling, inbound routing, final call status logging, caller ID selection, and recording callbacks.
11Call recordingsRecorded calls move from Twilio to Google Shared Drive, then Gemini creates transcript and summary output linked back to CRM activity.
12ReportingDashboard and health views rely on stored snapshots, provider events, sync logs, and campaign recipient rows.

Integration and Automation Inventory

The active systems and scheduled automations that keep the CRM running.

#NameDescription
1Next.js on VercelHosts the CRM app, API routes, campaign scheduler endpoint, sync endpoints, and health routes.
2Supabase PostgresStores contacts, opportunities, activities, campaigns, campaign recipients, provider events, users, tasks, preferences, templates, and sync logs.
3Google OAuth and Gmail APIAuthenticates users, powers shared inbox sync, contact email history, and 1:1 email sending.
4Google Pub/SubDelivers Gmail push notifications to the CRM webhook when Gmail watches are active.
5Google Shared Drive and GeminiStores retained call recordings and generates transcript and summary output.
6AirtableUpstream source for contact intake, source fields, initial consent state, webhook events, and fallback sync reconciliation.
7ResendSends campaign email and posts provider events into CRM.
8Twilio SMS and VoiceSends 1:1 and campaign SMS, receives inbound replies, handles delivery callbacks, browser dialing, inbound calls, and recordings.
9Campaign schedulerGitHub Actions starts every 5 minutes and calls the campaign cron route once per minute during the runner window.
10Gmail watch renewalGitHub and Vercel cron routes call the watch renewal route. Manual renewal on 2026-05-22 confirmed all 5 connected users active, including buyers@acquira.com.
11Call recording processorGitHub Actions calls the recording processor every 5 minutes.
12CIGitHub Actions runs Prisma validate, lint, typecheck, and build on pushes and PRs.
13Hosted documentationCloudflare Pages hosts the redacted, task-first interactive docs for teammate use.

SMS Campaign Guidelines

Rules for safe Twilio campaign use.

#NameDescription
1Use opted-in contacts onlySMS campaigns should only target contacts with phone numbers and active SMS opt-in.
2Keep campaign STOP languageCampaign SMS must include Acquira identity and STOP opt-out language. The CRM appends it when missing.
3Use Marketing routeSMS campaigns should stay inside the approved Twilio Marketing Messaging Service.
4Respect hard capsCampaigns are governed by hard caps and readiness checks instead of approval. Email defaults: 1,000 recipients per campaign, 2,000 recipients per day, 2 campaign starts per day. SMS defaults: 500 recipients per campaign, 500 recipients per day, 2 campaign starts per day.
5Expect batch pacingCRM processes SMS campaign sends in controlled batches, currently up to 500 recipients per CRM pass by default.
6Review paused campaignsDo not resume a paused SMS campaign until failure reasons, opt-outs, pending recipients, and recipient quality have been reviewed.
7Monitor delivery healthCampaigns only pause when an operator pauses them. Operators should still review failures, opt-outs, pending recipients, and Twilio status during larger sends.
8Clean duplicates firstReview duplicate phone groups before larger SMS sends. Campaign recipient add already skips repeat phone numbers within the same SMS campaign, but cleanup keeps reporting and contact history clearer.
9Do not use cold non-consented listsThe CRM must not be used to bypass Twilio A2P and consent rules.

Email Campaign Guidelines

Rules for safe Resend campaign use.

#NameDescription
1Use Resend for broad campaignsCampaign and bulk email should use Resend when sender reputation is healthy. Gmail remains available for 1:1 email, inbox history, and paced personal-sender fallback campaigns.
2Use verified sendersUse verified @acquira.com sender fields configured for Resend.
3Keep unsubscribe footerDo not remove or bypass the CRM unsubscribe footer for campaign email.
4Respect suppressionBounced, suppressed, complained, and unsubscribed contacts should remain excluded.
5Use test sendsSend a test before production sends, especially when using HTML.
6Treat opens carefullyOpen rate is directional because privacy tools and image blocking can inflate or hide opens.
7Use delivered as denominatorOpen rate, click rate, and unsubscribe rate should use delivered recipients as the denominator.
8Rich email editing and images are supportedThe CRM stores campaign bodies as email-ready HTML, but operators use a normal rich editor for writing, line breaks, bold, italic, underline, links, headings, and left/center/right alignment. Hosted HTTPS image URLs are supported. Storage-backed upload, drag/drop, and paste are available when BLOB_READ_WRITE_TOKEN is configured.
9Segment conservativelyWebsite leads with an email address are treated as subscribed unless they unsubscribe, complain, bounce into suppression, or are manually suppressed. Segment broad marketing carefully to protect sender reputation.
10Treat Resend limits as account-wideResend quotas and rate limits are shared by the Resend team/account, not multiplied per CRM user or sender.
11Use Transactional capacity for CRM sendsCRM campaigns send through Resend Email API, not Broadcasts. Resend dashboard verified Transactional Pro at 229 / 50,000 monthly emails used, daily limit Unlimited, and 5 req/s team rate limit on 2026-05-19.
12Remember CRM pacingCRM email campaigns are hard-capped at 1,000 recipients per campaign and process with Resend batch sending in chunks of 100 emails per API call. Gmail fallback campaigns default to 25 recipients per scheduler pass and 500 recipients per sender per Eastern day. Once a Gmail fallback campaign starts or sends, the campaign detail page shows sender, sent-today, remaining-today, and batch-pace counts. SMS campaigns are hard-capped at 500 recipients per campaign by default.
13Review the campaign detail pageEmail campaign detail pages are organized around Campaign Readiness, Test Send, Campaign Health, Clicked Links, Geography, and Recipients. Sender Health is reviewed from the Email Campaigns tab because it applies across campaigns.
14Use reusable image assetsUpload, paste, or save hosted image URLs from the email editor. Uploaded images are saved as reusable Image assets and inserted as centered HTML image blocks by default.
15Use open/read trends as scheduling guidanceThe Email Campaigns tab includes Open/Read Trends based on campaign recipient send time and open/click data in Eastern time. Treat this as scheduling guidance, not a perfect read receipt, because email clients can block or proxy open tracking.
16Add audiences from Contacts when neededFor reusable targeting, save filters in Contacts, then use bulk add-to-campaign or available campaign audience tools before sending. Preview or review recipient eligibility before production sends.
17Use Gmail automated fallback carefullyIf Dante, Nathan, or Andi need to use their own Gmail, select their sender in the email campaign editor. The CRM sends eligible recipients through that connected Gmail account in small scheduler batches instead of using Resend.

Email Status and Error Reference

Concise definitions for unusual campaign status and delivery messages.

#NameDescription
1SuppressedContact is blocked from campaign email because CRM or Resend marked the address ineligible. Common causes are bounce, complaint, provider suppression, unsubscribe, or manual block.
2BouncedRecipient mailbox or provider rejected the email. Review before retrying; repeated bounces hurt sender reputation.
3FailedCRM or provider could not send the message. Check the recipient error detail, commonly invalid email format, missing recipient, provider rejection, or malformed send payload.
4ComplainedRecipient marked the email as spam or complaint-equivalent. Do not resend marketing email without a clear compliance review.
5Email subscribedContacts with an email address are treated as subscribed for CRM marketing unless they have unsubscribed, complained, bounced into suppression, or were manually suppressed.
6OpenedResend reported an open-tracking event. This means the tracking pixel loaded, not necessarily that the recipient carefully read the email.
7ClickedResend reported a link click. Campaign detail shows clicked links when the provider event includes a URL.

Duplicate and Merge Guide

How duplicate and merged contact states should be interpreted.

#NameDescription
1Duplicate tagA Duplicate tag means another active contact currently shares the same normalized email or phone. Review the contact detail before sending broad campaigns.
2Merge buttonThe Merge button appears when active duplicate candidates are available. Merging keeps the selected primary contact and consolidates activities, campaign recipient history, categories, tasks, provider events, suppressions, and opportunity context.
3Merged tagA Merged tag means the contact has merge history. The system records merge details in Activity, not in the editable Notes field.
4Campaign protectionWhen adding recipients, the CRM skips repeat email addresses for email campaigns and repeat phone numbers for SMS campaigns, even if duplicates have not been manually merged yet.
5Cleanup cadenceRun a duplicate review before larger email or SMS campaigns so reporting, contact ownership, and activity history stay clean.

Approval and Guardrail Summary

Controls that protect against accidental sends, compliance misses, and duplicate processing.

#NameDescription
1Email approval removedEmail approval is removed. Hard caps and reputation checks are the active guardrails.
2SMS approval removedSMS approval is removed. Hard caps, opt-in checks, destination validation, and Twilio delivery monitoring are the active guardrails.
3Send-state protectionSENDING, PAUSED, and SENT campaigns cannot be manually re-sent.
4Paused campaign protectionPAUSED campaigns are intentionally skipped by scheduler recovery until an operator resumes them.
5Scheduler lockingCampaign cron uses locks and atomic claiming to reduce duplicate sends.
6Stale sending recoveryScheduler can recover stale SENDING campaigns that still have pending recipients.
7Email unsubscribe and suppressionCampaign email includes tokenized unsubscribe support and blocks unsubscribed, bounced, complained, suppressed, and otherwise ineligible recipients.
8Unknown email consentWebsite leads with unknown CRM email-marketing field values are treated as subscribed unless they have unsubscribed or are suppressed.
9SMS opt-in and keywordsSMS sends require phone and active opt-in state. STOP-style replies opt out. START-style replies restore opt-in.
10Manual pauseCampaigns no longer auto-pause. Operators can manually pause campaigns when delivery health, audience quality, or content requires review.
11Webhook and cron protectionResend webhooks validate signed events when configured. Twilio webhooks validate signatures in production. Protected cron endpoints require CRON_SECRET.
12Domain safetyDo not edit Google Workspace MX records when changing Resend or CRM DNS.
13Pipeline automationCompleted outbound email, SMS, and call activity can mark New Lead opportunities as Contacted.

Current Limitations

Known issues and boundaries that should stay visible until resolved.

#NameDescription
1Gmail watchesManual Gmail Watch Renewal run on 2026-05-22 confirmed 5 active watches. buyers@acquira.com is active through 2026-05-28T18:07:43Z. Continue normal scheduled renewal monitoring.
2Resend plan totalsResend dashboard verified Transactional Pro at 50,000 monthly emails, unlimited daily sends, Marketing Free, and 5 req/s team rate limit on 2026-05-19. Vercel production includes RESEND_MONTHLY_EMAIL_QUOTA=50000, RESEND_DAILY_EMAIL_QUOTA=unlimited, and RESEND_MARKETING_CONTACT_QUOTA=1000, so this is no longer an active caveat unless the plan changes.
3Email consent completenessMost email contacts still have unknown marketing status. The CRM now makes this visible in contact details and email campaign readiness, but operators should still segment broad marketing carefully.
4Duplicate contactsDuplicate email and phone groups remain, including test values. Campaign recipient add skips repeat email or phone recipients within the same campaign, but cleanup is still needed for cleaner reporting and contact history.
5Legacy merge audit historyExact duplicate merge audit notes start with the 2026-05-20 merge safeguard release. Older merges deleted duplicate records without a durable merge event, so historical merge details should not be reconstructed unless verified from an external backup or database log.
6SMS campaign queueLive production check on 2026-05-26 showed all campaigns in SENT status and 0 pending campaign recipients. FL June Biz Tour is no longer an active paused-queue caveat; continue reviewing SMS failure reasons and blocked carrier/landline history before reusing similar audiences.
7Advanced image asset managementCampaign editor supports hosted image URLs plus Vercel Blob-backed upload, drag/drop, paste, centered logo insertion, and rich-editor text/image alignment. The Health Dashboard now shows Image Uploads and Campaign Image Storage readiness. Advanced image library management such as replace, rename, and image dimension controls remains a future enhancement.
8Twilio carrier queue limitsCRM now shows SMS campaign throughput, pacing, pending queue, and configured quota math. Carrier-side queue limits and billing remain Twilio Console source-of-truth items.
9Advanced nested segment groupsContacts supports reusable saved filters and campaign recipient assignment workflows. More complex nested segment groups remain a future enhancement unless operators need deeper targeting.
10Gmail fallback metricsGmail fallback campaigns create campaign recipient sent status and outbound contact activity when sent, but do not produce Resend delivery, open, click, bounce, or complaint metrics.
11Database baselinePrisma migration, Supabase policy baseline, RLS review, and activity retention policy remain governance follow-ups.

Current Cost Model

Current subscription posture and what still needs billing confirmation.

#NameDescription
1VercelCurrent CRM hosting is modeled as Hobby at $0/mo. Pro reference is $20/user/mo.
2SupabaseCurrent CRM database is modeled as Free at $0/mo. Pro reference starts at $25/mo.
3ResendDashboard verified Transactional Pro for acquira under andi@acquira.com. Current model uses $20/mo for 50,000 transactional emails/month, unlimited daily sends, and Marketing Free with 1,000 contacts. Paid transactional overage reference is $0.90/1,000 emails when pay-as-you-go is enabled.
4Twilio local numbersCRM has 4 active local numbers. Prior model uses $1.15/number/mo, or $4.60/mo fixed number cost before usage.
5Twilio usageSMS, inbound voice, outbound voice, call recording, carrier fees, and A2P fees are usage-based. Twilio Console Usage is the billing source of truth.
6AirtableShared company cost. Prior CRM docs listed $264/mo, but seat count and billing should be confirmed.
7Google Workspace and DriveShared company subscription used for OAuth, Gmail, Workspace accounts, Drive storage, and retained call artifacts.
8Gemini / OpenAIUsage-based AI costs. Gemini is active for call transcript and summary processing.
9Cloudflare PagesHosted docs are deployed to Cloudflare Pages and treated as low/no incremental CRM cost unless billing says otherwise.
10GitHub Actions and DNSSchedulers and CI are treated as included unless usage exceeds included GitHub limits. Namecheap/DNS is shared company infrastructure.
#NameDescription
1Minimum CRM-specific fixed subscription$0 Vercel Hobby + $0 Supabase Free + $20 Resend Transactional Pro + $4.60 Twilio numbers = $24.60/mo, before SMS, voice, recording, carrier, A2P, AI, and taxes.
2SMS campaign usage formulaoutbound SMS segments x ($0.0083 Twilio base + carrier fee). Current public long-code carrier fee references are roughly $0.0035-$0.0050 per outbound segment, so 1,000 outbound single-segment SMS is roughly $11.80-$13.30, before inbound replies, failed-message fees, A2P fees, and taxes.
3Resend overage formulaIncluded quota is 50,000 transactional emails/month. If pay-as-you-go is enabled, additional transactional volume is modeled as ceil(overage_emails / 1000) x $0.90.
4Shared company tools included separatelyAirtable, Google Workspace, domain/DNS, GitHub, and Cloudflare may already be paid by Acquira. If finance includes the prior Airtable estimate, the modeled fixed cost becomes $24.60 + $264.00 = $288.60/mo, before usage.
5Current billed truth sourceUse Resend Billing/Usage, Twilio Console Usage, Vercel Billing, Supabase Billing, Airtable billing, and Google Workspace billing for invoice-level truth. The CRM model is an operating estimate, not an accounting ledger.