{
  "icp": "action-oriented solo consultants, small sales teams, boutique agencies, and B2B services running their next-action pipeline on OnePageCRM",
  "capabilities": {
    "availability": {
      "headline": "Captures the inquiry as a OnePageCRM contact, books the meeting with a Next Action in the same call, and feeds one unified conversion pipe for your website forms AND your AI Receptionist.",
      "lede": "Every caller who lands on the line becomes a OnePageCRM contact with the right owner, the right company, the right Lead Source, and a Calendar event on the routed-to user — plus a Next Action attached so the contact never sits without a clear follow-up in the Action Stream. AND the same lead event flows through one unified pipe (with the same shape, same source attribution, and same server-side conversion path used by your website forms) so your OnePageCRM Action Stream and your Google / Facebook / LinkedIn Ads both stay in sync.",
      "cards": [
        {
          "num": "A.01",
          "title": "Every caller becomes a OnePageCRM contact — not a stray voicemail",
          "body": "The AI Receptionist captures first name, last name, primary email, primary phone, company, and call intent. Then AnyCRM writes it into OnePageCRM as a contact with the routed-to user as <code>owner_id</code> and the Lead Source set to the value you froze at setup — before the call has ended."
        },
        {
          "num": "A.02",
          "title": "Books meetings as native OnePageCRM Calendar events",
          "body": "The meeting lands as a Calendar event of the right type (Meeting, Call, Demo) tied to the contact, with the assigned user as the event owner, the duration computed from the meeting type, and the event surfaced on the contact's timeline so it shows up wherever you read the record."
        },
        {
          "num": "A.03",
          "title": "Sends the lead event straight to your CRM. You decide what happens next.",
          "body": "AnyCRM does not pretend to know your Next-Action policy. Every contact-create and every meeting-book sends a lead event straight to your CRM (with <code>source: \"AI Receptionist Call\"</code> or <code>source: \"AI Receptionist Web\"</code>) where YOUR Action Stream rules take over. Which user, which lane, which Next-Action template, which deal pipeline — your call. We set up the receiving end inside your CRM for you during onboarding, tuned to your industry and your client configuration. AnyCRM doesn't get in the way of workflow you've already encoded into OnePageCRM."
        }
      ],
      "apiSummary": "The AI Receptionist asks AnyCRM for availability against the people on your team and gets back open slots in the caller's timezone. No double bookings. Your busy time is always respected. Every AnyCRM call prevents duplicate contacts, creates or links the company, sets the routed-to <code>owner_id</code> (matched from your roster), writes the Calendar event with <code>contact_id</code> set so it surfaces on the contact timeline, writes the mandatory Next Action so the contact lands on the Action Stream, and sends the lead event straight into your CRM tagged with <code>AI Receptionist Call</code> or <code>AI Receptionist Web</code>. The same lead also feeds the AnyCRM Conversion Lift pipeline (covered in the next capability) so your Google, Facebook, and LinkedIn Ads start optimising against the call and chat leads that actually pick up the phone.",
      "tools": [
        "getOnepagecrmAvailability",
        "createOnepagecrmContactAppointment"
      ],
      "curl1Path": "/mcp/tools/getOnepagecrmAvailability",
      "curl2Path": "/mcp/tools/createOnepagecrmContactAppointment",
      "pipeIntro": "Most businesses run two completely separate conversion-tracking stacks: one for the website (forms, page-load pixels) and a totally absent one for the phone and the AI Receptionist. So Google Ads and Facebook Ads only learn from form-fills, the bidding optimises for the wrong audience, attribution is broken, and analytics double-count or miss real conversations entirely. AnyCRM closes that gap by running BOTH surfaces through a single conversion pipe.",
      "pipeStages": [
        {
          "stage": "1. Capture",
          "body": "A lead arrives either through your website form OR through the AI Receptionist on phone / chat. Either way, AnyCRM produces the same clean lead-event shape, tagged at source with either <code>AI Receptionist Call</code>, <code>AI Receptionist Web</code>, or your website's form identifier. One vocabulary across both surfaces."
        },
        {
          "stage": "2. Deliver to your CRM",
          "body": "AnyCRM sends the lead event straight to your OnePageCRM account, into the receiving flow we wired up for you at onboarding. Your Action Stream rules decide what happens next: which user owns the contact, which Lead Source it inherits, which Next-Action template fires, which deal pipeline it lands on. You don't have to maintain two sets of rules. Web leads and AI Receptionist leads both arrive through the same door."
        },
        {
          "stage": "3. Fire server-side conversion to your ad platforms",
          "body": "The same lead event fires server-side into Google Ads, Facebook Ads, and your analytics platform, using the origin of the domain you registered with AnyCRM. Server-side means the conversion can't be blocked by ad-blockers, doesn't degrade under iOS / Safari tracking restrictions, and lands with full attribution context."
        },
        {
          "stage": "4. Optimise, attribute, report",
          "body": "Because website conversions AND AI Receptionist conversions flow through the same pipe with the same source taxonomy, your Google Ads bid strategy now optimises against real revenue (not just form-fill noise), your Facebook Ads campaigns see the high-intent traffic that picks up the phone, your analytics platform sees a single unified funnel, and attribution stops fragmenting between web and voice."
        }
      ],
      "outcomes": [
        "<strong>Higher ROAS.</strong> Ad bidding optimises against actual conversations and booked meetings, not against the noisy subset of leads that happen to fill a form.",
        "<strong>Lower ad costs.</strong> Once Google Ads and Facebook Ads learn what a real lead looks like, they stop spending against lookalikes of low-quality form-fills.",
        "<strong>Enriched analytics.</strong> Every conversation surface (web form, phone call, AI Receptionist chat) feeds the same event shape into your analytics, so funnels are complete instead of half-blind.",
        "<strong>Correct attribution.</strong> A caller who first saw a Google Ad, then visited the site, then phoned three days later gets attributed end-to-end. Voice traffic stops being invisible to your marketing stack.",
        "<strong>One source of truth for lead policy.</strong> Your OnePageCRM Action Stream owns Next-Action assignment, Lead-Source inheritance, and ownership. AnyCRM doesn't drift out of date because AnyCRM never tried to own that policy in the first place."
      ],
      "whyThisIsBetter": "Most competitor AI Receptionists try to maintain rules for which user, which Next Action, and which Lead Source to apply. That approach breaks the moment your team changes, and it ignores the conversion-tracking surface entirely. AnyCRM inverts the responsibility. AnyCRM stays focused on the conversation (capture, dedup, route, book, cancel) and delivers a clean lead event to the two destinations that matter: your OnePageCRM account (for Action-Stream logic) and your ad platforms server-side (for conversion optimisation, attribution, and ROAS). This is a custom service baked into the AI Receptionist package. We configure the lead-receiving flow inside your CRM AND the server-side conversion tracking at onboarding, matched to your specific industry, ad mix, and analytics setup.",
      "honestAside": "We'll be candid: as far as we can tell, none of our competitors have thought of this yet. They sell AI Receptionists as a phone-answering product. AnyCRM treats the AI Receptionist as one of two equally weighted entries into a unified lead-event pipe, and that's where the real compounding value sits."
    },
    "adsConversionLift": {
      "headline": "Turns every call and chat into a real conversion event your Google, Facebook, and LinkedIn Ads can actually optimise against. So Cost per Lead drops, ROAS goes up, and CAC stops being a guess.",
      "lede": "If you run paid Ads on Google, Facebook, or LinkedIn, here is the uncomfortable truth: those platforms only get smarter when they see real conversions. Today, a website form-fill counts. A real phone call from a high-intent buyer who picked up the phone at 7pm does NOT count. So Google bids harder on the audience that fills forms (often the cheaper, lower-intent one) and ignores the audience that actually calls. Cost per Lead looks fine. CAC quietly creeps up. ROAS looks misleading. AnyCRM fixes this. Every call and chat the AI Receptionist handles is sent as a real conversion event to Google Ads, Facebook Ads, AND LinkedIn Ads. The bidding algorithm finally sees what's actually working.",
      "cards": [
        {
          "num": "1b.01",
          "title": "Every phone call and every chat becomes a tracked conversion. Not just website form-fills.",
          "body": "Today, Google Ads and Facebook Ads probably think your only conversions are website form-fills. That's why your Cost per Lead looks low but your sales team complains the leads are weak. The high-intent traffic is calling you instead of filling a form, and the Ad platforms have no idea. AnyCRM sends every call and every chat the AI Receptionist handles into your Ad platforms as a real conversion event. Suddenly Google, Facebook, and LinkedIn can see the FULL picture of who is converting from your Ads."
        },
        {
          "num": "1b.02",
          "title": "Lower Cost per Lead. Better ROAS. Smaller CAC.",
          "body": "Once your Ad platforms can see the phone calls and chats as real conversions, they re-train on a better signal. Bidding shifts toward audiences that actually pick up the phone, not just the audience that loves filling out forms. In practice this means: <strong>Cost per Lead drops</strong> because you stop overpaying for low-intent form-fills; <strong>Return on Ad Spend goes up</strong> because the Ads now find people closer to ready-to-buy; and <strong>Customer Acquisition Cost shrinks</strong> because more of your Ad budget reaches buyers who will actually convert into customers."
        },
        {
          "num": "1b.03",
          "title": "The same pipe carries your website forms too. One source of truth across Ads, CRM, and Analytics.",
          "body": "AnyCRM doesn't just track AI Receptionist conversions. It also runs your existing website forms through the same pipeline. So a lead from a Google Ad that fills a form on your website AND a lead from a Facebook Ad that called the AI Receptionist three days later both end up tagged, attributed, and counted in exactly the same way. Your Ads platform stops double-counting, your analytics stop fragmenting, and your OnePageCRM Action Stream stops being half-blind to where your leads actually came from."
        }
      ],
      "apiSummary": "Every contact-create and meeting-book fires through AnyCRM's Conversion Lift pipeline. The lead event lands inside your OnePageCRM account for Action-Stream logic, AND fires a real conversion event server-side into Google Ads, Facebook Ads, and LinkedIn Ads using the verified origin of your registered domain. Server-side means the conversion can't be blocked by ad-blockers, doesn't degrade on iOS or Safari, and arrives with full attribution context so the Ad platforms' bidding algorithms can re-train on it. Your existing website forms run through the same pipeline, so Web and Voice conversions feed the SAME training signal.",
      "businessImpact": [
        "<strong>Cost per Lead drops.</strong> Because Google, Facebook, and LinkedIn stop wasting your Ad budget on lookalikes of low-intent form-fillers, and start finding the audience that picks up the phone.",
        "<strong>Return on Ad Spend (ROAS) goes up.</strong> Because the Ads now optimise toward conversations that actually close, not toward whichever cheap audience generates the most form submissions.",
        "<strong>Customer Acquisition Cost (CAC) shrinks.</strong> Because a higher share of every Ad dollar reaches buyers ready to talk to a human (or in this case, your AI Receptionist).",
        "<strong>Analytics get a complete funnel.</strong> Web and voice leads sit side by side, with the same source taxonomy. You stop seeing \"50% of revenue: unknown source.\"",
        "<strong>Attribution stops fragmenting.</strong> A buyer who first clicked a Google Ad, then called the business three days later, finally shows up correctly attributed. Today, that buyer is invisible to your Ads stack.",
        "<strong>You finally know if Ads are working.</strong> Most businesses cannot honestly tell you whether their Google or Facebook spend is profitable. With AnyCRM's Conversion Lift, you can."
      ],
      "plainEnglishExample": "Imagine you spend $5,000/month on Google Ads. Today, you see 80 form-fills and assume that's the full picture. With AnyCRM running, you'll also see (say) 60 phone calls and 45 web chats the AI Receptionist handled, all flowing into Google Ads as real conversions. Suddenly Google sees 185 conversions a month instead of 80. It re-trains on that bigger, better signal. Within weeks, the bidding finds you more of the right kind of buyer. Same $5,000 spend, more real conversations, lower Cost per Lead, higher revenue. That is what \"AI Receptionist with AnyCRM\" actually means for the bottom line. Not just \"it answers the phone.\"",
      "tools": [
        "createOrUpdatesOnepagecrmContact",
        "createOnepagecrmContactAppointment"
      ]
    },
    "lifecycle": {
      "headline": "Owns the full Calendar-event and Next-Action lifecycle inside OnePageCRM.",
      "lede": "Every \"push the demo to Thursday\" or \"actually, cancel that\" lands with the AI Receptionist instead of in your inbox. AnyCRM reschedules update the event in place and roll the Next Action forward. Cancellations preserve the audit trail with a dated note and a <code>[CANCELLED]</code> subject prefix instead of erasing the record.",
      "cards": [
        {
          "num": "B.01",
          "title": "Finds the event by email — no event IDs on the call",
          "body": "Customers don't quote event IDs over the phone. AnyCRM gives the AI Receptionist an easy way to find the soonest upcoming Calendar event linked to a contact matched on the caller's email, reads back the subject, date, time, and assigned user before changing anything."
        },
        {
          "num": "B.02",
          "title": "Reschedules in one update — keeps the same event record",
          "body": "Rescheduling updates the start and end of the existing Calendar event in a single confirmation and rolls the Next Action's date forward to match. No cancel-then-rebook round-trip means the event history and the contact's timeline both stay intact. Failed reschedules leave the original event untouched."
        },
        {
          "num": "B.03",
          "title": "Cancels with the reason on the timeline, not by deletion",
          "body": "AnyCRM marks the event with a <code>[CANCELLED]</code> prefix on the subject and writes the caller's reason as a dated Note on the contact's Action Stream — instead of issuing a hard DELETE that wipes the event and leaves the user with no record of <em>why</em> the meeting fell through."
        }
      ],
      "apiSummary": "AnyCRM's search, reschedule, and cancel all accept just an email. The soonest upcoming OnePageCRM Calendar event linked to the matching contact is resolved inside AnyCRM via the contact search followed by the contact's calendar-events listing, sorted by start time. No event IDs at the AI Receptionist layer.",
      "tools": [
        "searchOnepagecrmAppointments",
        "rescheduleOnepagecrmAppointment",
        "cancelOnepagecrmAppointment"
      ],
      "curl1Path": "/mcp/tools/searchOnepagecrmAppointments",
      "curl2Path": "/mcp/tools/rescheduleOnepagecrmAppointment",
      "curl3Path": "/mcp/tools/cancelOnepagecrmAppointment"
    },
    "routing": {
      "headline": "Routes every caller to the right OnePageCRM user — and respects existing ownership.",
      "lede": "OnePageCRM accounts run on owners, teams, and a shared Action Stream. At setup AnyCRM imports your OnePageCRM user roster into its database and enriches each user with lane, expertise, languages, timezone, and a bookable meeting type. The AI Receptionist then routes each caller to the user who actually handles that lane. Existing contact <code>owner_id</code> is honoured as the source of truth.",
      "cards": [
        {
          "num": "C.01",
          "title": "Routes by lane — closer vs prospector vs account manager",
          "body": "\"I'd like to talk about pricing\" routes to the closer pool. \"I'm just gathering information\" routes to a prospector for qualification. \"I'm already a customer\" routes back to the account manager on the existing contact — and the existing <code>owner_id</code> is preserved."
        },
        {
          "num": "C.02",
          "title": "Honours existing owners in OnePageCRM",
          "body": "If a contact already has an <code>owner_id</code>, the AI Receptionist doesn't reassign them. The Calendar event, the Note, and the new Next Action all attach to the existing record under the existing owner — no orphaned duplicate and no lead poached off another user's Action Stream."
        },
        {
          "num": "C.03",
          "title": "Matches fresh inbound callers to the right user on the team",
          "body": "Net-new callers with no existing OnePageCRM contact get matched to a user on the lane you've designated for that intent, honouring the criteria you set in AnyCRM. The AI Receptionist doesn't fight whatever rotation rule you already encode at the team level."
        }
      ],
      "apiSummary": "Team details live in AnyCRM's database, pulled once from OnePageCRM at setup — every user with their email, role, account access, and active flag — enriched with lane, expertise, languages, timezone, default meeting type, and meeting duration (valuable context for the AI Receptionist that OnePageCRM's user object doesn't carry). Each user's OnePageCRM <code>user_id</code> is kept on the record as the bridge for owner-assignment writes on contacts and as the event owner on Calendar writes. At runtime, one read of AnyCRM's roster matches caller → lane → user; new contacts inherit that user as <code>owner_id</code>; existing contacts keep theirs.",
      "tools": [
        "listOnepagecrmTeamMembers",
        "getOnepagecrmUserProfile"
      ],
      "curl1Path": "/mcp/tools/listOnepagecrmTeamMembers",
      "curl2Path": "/mcp/tools/getOnepagecrmUserProfile"
    }
  },
  "setup": {
    "headline": "Setup in 3 steps. Battle-tested on real <span data-tpl-crm>OnePageCRM</span> accounts.",
    "lede": "You connect <span data-tpl-crm>OnePageCRM</span> once. AnyCRM imports your roster, your Lead Sources, your statuses, and your meeting types. AnyCRM also wires up the receiving end inside your CRM so lead events from the AI Receptionist land where your Action Stream rules can act on them. Then the AI Receptionist starts capturing inquiries and booking meetings the same afternoon. No middleware. No prompt-engineering by you.",
    "steps": [
      {
        "num": "S.01",
        "title": "Connect OnePageCRM (API key + User ID, 60 seconds)",
        "body": "Generate an API key in OnePageCRM (Account → Apps &amp; Integrations → API) and paste it in along with the User ID it's scoped to. OnePageCRM uses HTTP Basic auth with the User ID as username and the API key as password — both are revocable from the same screen at any time. Every request AnyCRM makes carries a stable User-Agent so each write is attributable to AnyCRM in OnePageCRM's account audit log."
      },
      {
        "num": "S.02",
        "title": "Import roster, Lead Sources, statuses &amp; meeting types. Wire up your CRM's lead-receiving flow.",
        "body": "AnyCRM imports every OnePageCRM user as a bookable team member (with email, timezone, and active flag), reads your existing Lead Sources list (so new contacts inherit the right source), freezes your statuses (so the agent only assigns statuses that exist), and locks the default meeting types and durations for Calendar event creation. The default Lead Source for inbound calls is set here; you confirm it once and don't re-enter it on every call. During onboarding we set up the receiving flow inside your CRM so the lead events from the AI Receptionist land where your Action Stream rules can act on them. AnyCRM does NOT replicate your Next-Action templates or your deal pipelines. Your OnePageCRM account decides what happens after a lead is captured. AnyCRM just delivers a clean event."
      },
      {
        "num": "S.03",
        "title": "Drop the AI Receptionist on your phone line and your site",
        "body": "Forward your business number to the AI Receptionist's number and paste the chat widget into your site. The same AI Receptionist — same roster, same OnePageCRM account, same lead-event pipe into your CRM and your ad platforms — answers both voice and web. Live the same afternoon."
      }
    ],
    "nativeAlternative": {
      "headline": "Why not just use OnePageCRM's <strong>Next Action</strong> workflow + Lead Clipper + web forms?",
      "body": "OnePageCRM's Next Action workflow, Lead Clipper, and web forms are excellent at the steps <em>after</em> you've decided a lead is worth pursuing. They don't pick up the phone. A new caller at 9pm gets a voicemail, not a contact; a web form sits in the Action Stream until someone reads it; the Lead Clipper assumes you're already on the prospect's LinkedIn. The AI Receptionist is the layer before all of that: it picks up the call, asks the right qualifying questions, books the meeting as a native Calendar event on the right user, sets the Next Action with the date the user expects to see in their Action Stream, writes a clean contact (with company and Lead Source) and a first Note from the actual conversation, AND sends the same lead event straight into your CRM's downstream Action-Stream logic plus your ad platforms server-side. So your OnePageCRM workflow, your analytics, and your Google / Facebook Ads bidding all start firing on a real conversation, not a name and a voicemail."
    },
    "enrichmentSummary": "Every tool the AI Receptionist calls is an opinionated wrapper inside AnyCRM. AnyCRM does the messy work for you. Dedup by primary email then primary phone, company linking, status mapping, Lead Source resolution, Next-Action date math, timezone conversion, pagination, error normalisation, lead-event delivery into your CRM, and server-side conversion tracking into your ad platforms. All of it happens before the LLM ever sees a response. So the AI Receptionist reasons over clean, AI-aligned payloads instead of raw CRM internals.",
    "enrichmentExamples": [
      {
        "title": "Capturing a new inquiry",
        "raw": "Writing a contact straight into OnePageCRM looks simple — but OnePageCRM does not dedup for you. Send the same caller twice and you get two contacts with two different <code>id</code> values, two owners, two timelines. There is a separate merge flow in the UI, but no merge endpoint in the public API, so cleanup is manual. <code>emails</code> and <code>phones</code> are arrays of objects (<code>{value, type}</code>), so naive integrations that pass <code>email: \"foo@bar.com\"</code> as a string silently fail validation. <code>status_id</code> and <code>lead_source_id</code> reference separate endpoints — send free-text values and the create either rejects them or accepts them as the wrong fields entirely. And every contact in OnePageCRM is expected to carry a Next Action — create one without and it falls off the Action Stream, which is the workflow surface OnePageCRM users actually live in. Nothing in raw OnePageCRM fires a server-side conversion event to your ad platforms, so call-driven and chat-driven leads never get optimised for.",
        "mcp": "<code>createOrUpdatesOnepagecrmContact</code> accepts <code>name</code>, <code>email</code>, <code>phone</code>, <code>note</code>, <code>company</code>, plus the inferred owner. AnyCRM searches by email then phone, picks the surviving record (or creates a new one with properly-shaped <code>emails[{value,type}]</code> / <code>phones[{value,type}]</code> arrays), creates or links the company, resolves <code>lead_source_id</code> and <code>status_id</code> against the enums you froze at setup, sets the routed-to <code>owner_id</code>, appends the note, writes the Next Action with the agreed follow-up date so the contact lands on the Action Stream, sends the lead event straight into your CRM (with source <code>AI Receptionist Call</code> or <code>AI Receptionist Web</code>), AND fires a server-side conversion event into your ad platforms using the origin of your registered domain. All in one AnyCRM call."
      },
      {
        "title": "Booking the meeting",
        "raw": "Creating a Calendar event directly against OnePageCRM is non-obvious. The event must reference a <code>contact_id</code> for it to surface on the contact timeline — events created without one exist only on the user's calendar and never appear when the user opens the contact record. <code>start_time</code> and <code>end_time</code> are ISO-8601 strings; OnePageCRM stores them in the event owner's timezone, not the invitee's, so naive datetimes from the caller have to be converted before write. The event <code>owner_id</code> is what determines whose calendar the event appears on — pass the wrong user and the event lands on the wrong calendar entirely, with no validation against the contact's <code>owner_id</code>. There is no separate meeting-type enum, so duration has to be computed by the caller.",
        "mcp": "<code>createOnepagecrmContactAppointment</code> takes <code>email</code>, <code>scheduled_datetime</code> (naive — no offset), <code>invitee_timezone</code>, and <code>meeting_type</code>. AnyCRM resolves the right user from the lane, converts the naive datetime to the event owner's timezone, computes <code>end_time</code> from the meeting-type duration frozen at setup, sets <code>contact_id</code> so the event surfaces on the contact timeline, sets <code>owner_id</code> to the routed-to user, sends the lead event straight into your CRM with the booking context, fires the server-side conversion event into your ad platforms, and returns both local and UTC start times in the response."
      },
      {
        "title": "Cancelling with a reason",
        "raw": "Deleting a Calendar event in OnePageCRM removes the event entirely. There is no <code>reason</code> field, no cancellation outcome, no soft-state — the event disappears from the user's calendar and from the contact timeline, and the user gets no signal of <em>why</em> the meeting fell through. To preserve the audit trail you'd have to: (1) read the event to capture details, (2) write a Note on the linked contact with the reason and the original event time, (3) update the event to a cancelled-state subject prefix instead of deleting. None of these are atomic, and the deletion is irreversible.",
        "mcp": "<code>cancelOnepagecrmAppointment</code> takes <code>email</code> + <code>reason</code>. AnyCRM resolves the soonest upcoming event, writes the reason as a dated Note on the contact's Action Stream, updates the event subject with a <code>[CANCELLED]</code> prefix, and rolls the Next Action forward to capture the follow-up — all in one AnyCRM call. No hard deletion, full audit trail, event stays queryable in the user's reporting, and the response contains the cancelled event ID and the recorded reason so the AI Receptionist can read it back to the caller."
      }
    ],
    "alignmentSummary": "Every AnyCRM tool for OnePageCRM follows the same AI-alignment contract, so the AI Receptionist never has to think about transport:",
    "alignment": [
      "<strong>Naive datetimes in, ISO-8601 out.</strong> The AI Receptionist passes <code>2026-05-15T11:00:00</code> + a timezone string. AnyCRM converts to the event owner's timezone and writes ISO-8601 <code>start_time</code> / <code>end_time</code>.",
      "<strong>Email is the identity.</strong> Cancel and reschedule never need an event ID at the AI Receptionist layer — email + soonest upcoming resolves inside AnyCRM.",
      "<strong>Lead Source, status, and meeting type come from setup, not the LLM.</strong> The AI Receptionist can't accidentally tag a record with a free-text source — it inherits the values you configured at setup; meeting type and duration are constrained to your existing enum.",
      "<strong>Existing owners are sacred.</strong> If a contact already has an <code>owner_id</code>, AnyCRM preserves it. New contacts only get the matched owner when no owner exists.",
      "<strong>Next Action is mandatory.</strong> Every captured contact leaves the call with a dated Next Action — because a OnePageCRM contact without a Next Action falls off the Action Stream, which is where the workflow actually happens.",
      "<strong>Cancellation is subject-prefix + Note, not deletion.</strong> The audit trail survives so reporting stays accurate and the user can see exactly why the slot opened up.",
      "<strong>Every lead event leaves AnyCRM in two places at once.</strong> Your CRM gets the lead event so your Action-Stream logic can run. Your ad platforms get the server-side conversion event so bidding optimises against real conversations. Both happen on the same AnyCRM call. No race conditions, no missing events.",
      "<strong>Flat, deterministic shapes.</strong> Every AnyCRM response has the same top-level keys across every tool, so the AI Receptionist's prompt never grows with edge-case branching.",
      "<strong>Errors are messages, not codes.</strong> An error from OnePageCRM becomes a one-sentence reason the AI Receptionist can repeat to the caller without translation.",
      "<strong>Idempotent reschedules.</strong> If a reschedule fails mid-flight, the original OnePageCRM event is preserved — the customer never ends up with nothing."
    ],
    "industryLine": "Currently running for <strong>solo consultants, boutique agencies, B2B services, and small sales teams</strong> — anyone whose pipeline lives in OnePageCRM's Action Stream but whose phone keeps ringing after the workday ends.",
    "teamsSetup": {
      "headline": "Multi-user setup — roster, lanes &amp; system-prompt assembly",
      "body": "If you run more than one user on OnePageCRM, AnyCRM imports the roster once, you link each user to the lanes they actually cover (closer / prospector / account manager / customer success), and AnyCRM bakes the result into the AI Receptionist's system prompt at setup time — not at runtime. The AI Receptionist doesn't query your roster on every call; it already knows who handles what.",
      "steps": [
        "<strong>Roster import.</strong> AnyCRM imports your OnePageCRM users once and writes each one into its database keyed by <code>crm_user_id</code> (with name, role, lane, timezone, OnePageCRM user ID).",
        "<strong>Per-user meeting types.</strong> For each user, AnyCRM resolves the meeting types they actually book and the duration per type. One call per person, cached.",
        "<strong>Lane visibility.</strong> Each lane is flagged <em>Public</em>, <em>Private</em> or <em>Ignored</em> — the AI Receptionist only routes to and books on Public lanes. You toggle this in the AnyCRM dashboard without re-deploying.",
        "<strong>Lead-event receiving flow inside your CRM.</strong> During onboarding we wire up the flow inside your CRM that receives lead events from AnyCRM. That's where your Next-Action template and Lead-Source-inheritance policy live. AnyCRM doesn't try to own them.",
        "<strong>System-prompt assembly.</strong> The cached roster + lane + meeting-type JSON is prepended to the AI Receptionist's system prompt before the humaniser splits (personality, etiquettes, tone, speech style) — so the AI Receptionist reads the team before it reads its own instructions.",
        "<strong>Runtime stays minimal.</strong> On a live call the AI Receptionist makes at most one availability call and one booking call — never a roster lookup. Updates to users, lanes, or meeting types re-run the cache; the AI Receptionist picks them up on its next deploy."
      ],
      "note": "The end result: the AI Receptionist can match \"I'd like to book a discovery call with your sales team\" → the closer pool → that user's discovery-call meeting type → that user's calendar availability → a booked OnePageCRM Calendar event on that user's calendar with the contact attached and a dated Next Action on the Action Stream → a lead event delivered straight into your CRM → a server-side conversion event in your ad platforms. Without a single roster query during the call."
    }
  },
  "privacy": {
    "headline": "Your <span data-tpl-crm>OnePageCRM</span> data passes through AnyCRM. It doesn't stick.",
    "lede": "AnyCRM processes your <span data-tpl-crm>OnePageCRM</span> data to answer the call — then forgets it. The only thing AnyCRM persists is a conversation history ID so the AI Receptionist can recognise a returning caller. Contacts, companies, calendar events, notes, deals — all of it stays in OnePageCRM, owned by your OnePageCRM account.",
    "cards": [
      {
        "kind": "stored",
        "label": "What AnyCRM stores",
        "body": "<strong>Conversation history IDs only.</strong> So the AI Receptionist can pick up where it left off if a caller hangs up and rings back. No call audio, no transcripts of contact records, no caller PII."
      },
      {
        "kind": "not-stored",
        "label": "What AnyCRM doesn't",
        "body": "Caller names, emails, phone numbers, OnePageCRM contact IDs, your user roster, your Lead Sources, your statuses, your deal data, your Action Stream. None of it. AnyCRM reads what it needs, hands it to the LLM, fires the events, and discards the payload."
      },
      {
        "kind": "data-lives",
        "label": "Where data lives",
        "body": "<strong>In your OnePageCRM account and in whatever systems your CRM's flow forwards lead events to.</strong> Contacts, companies, calendar events, notes, Next Actions all live in OnePageCRM — source-attributed (always <code>AI Receptionist Call</code> or <code>AI Receptionist Web</code>), attributed to AnyCRM in the audit log, revocable. AnyCRM does not build a shadow CRM alongside yours."
      },
      {
        "kind": "revoke",
        "label": "Revocation",
        "body": "Revoke the API key in your OnePageCRM Apps &amp; Integrations panel and the AI Receptionist loses access immediately. There is no \"export your data\" step because there is no data to export — it was never AnyCRM's to hold."
      }
    ],
    "scopesSummary": "OnePageCRM uses a single User-ID + API-key pair over HTTP Basic auth, but AnyCRM only calls the smallest set of endpoints required for the booking lifecycle — nothing for analytics, nothing for marketing, nothing for billing.",
    "scopes": [
      "<strong>Contacts (read + write).</strong> Read and write contacts, dedup against existing records, append Notes (the lead-capture work).",
      "<strong>Calendar events (read + write).</strong> Read availability and write Calendar events on the routed-to user with <code>contact_id</code> attached; update to reschedule and cancel (the booking work).",
      "<strong>Actions (write).</strong> Write the Next Action for every captured contact so the record lands on the Action Stream where the user actually works.",
      "<strong>Notes (write).</strong> Append call summaries and cancellation reasons onto the contact timeline.",
      "<strong>Team members, Lead Sources, statuses (read).</strong> Read your roster and frozen enums at setup time so the AI Receptionist knows who exists and which tag values are valid.",
      "<strong>Not requested:</strong> billing / subscription data, deals write access, custom reports, mail sync, your other integrations."
    ],
    "surfaceNote": "Same API key any OnePageCRM integration uses — but a smaller surface. AnyCRM holds the User ID and API key (and sets a stable User-Agent on every request, so every write is attributable to AnyCRM in OnePageCRM's audit trail). The LLM never sees either credential, and every tool call is logged with the operation name, never the raw payload."
  },
  "failureModes": [
    {
      "title": "Duplicate contacts",
      "raw": "OnePageCRM does not dedup on contact create. Send the same caller twice and you get two records, two owners, two timelines, and no merge endpoint in the public API to clean it up. <strong>My AI Front Desk</strong> publishes a Zapier-style \"Create Lead\" action against OnePageCRM that fires straight at the contacts endpoint with no search-before-write — the caller's email goes in, a duplicate comes out, and the next call from the same person creates a third record. <strong>Smith.ai</strong> publishes no OnePageCRM-specific integration; the path would be Zapier-mediated, with the same single-step create that can't dedup. <strong>Goodcall</strong> publishes no OnePageCRM-specific integration either; any path would be Zapier-mediated and architecturally one-shot.",
      "mcp": "AnyCRM does NOT do a one-shot create. AnyCRM first searches OnePageCRM on a normalised lowercased + trimmed email, then on a normalised phone, then decides whether to update the existing contact or create a new one. A returning caller lands on the existing record with a new Note and a refreshed Next Action — never as a duplicate. The AI Receptionist literally cannot create a second contact for someone OnePageCRM already knows.",
      "competitorsAffected": ["My AI Front Desk", "Smith.ai", "Goodcall"]
    },
    {
      "title": "Misshapen emails and phones arrays",
      "raw": "OnePageCRM's contact create rejects strings on <code>emails</code> and <code>phones</code> — both must be arrays of objects (<code>{value, type}</code>). <strong>My AI Front Desk's</strong> Zapier-surfaced \"Create Lead\" action flattens caller email and phone into single strings — either the create silently fails validation or it succeeds with the wrong type label, and later searches by primary email behave inconsistently. <strong>Smith.ai</strong> publishes no OnePageCRM-specific integration; a Zapier-mediated path would have the same flattening problem. <strong>Goodcall</strong> publishes no OnePageCRM-specific integration; same architectural constraint. OnePageCRM treats different <code>type</code> values (Work, Home, Other) as separate searchable fields, so a record written with the wrong type label can't be found by a search keyed on the right one — and a fresh duplicate is created next time the caller phones in.",
      "mcp": "<code>createOrUpdatesOnepagecrmContact</code> always builds <code>emails: [{value, type: 'Work'}]</code> and <code>phones: [{value, type: 'Work'}]</code> from the caller's plain strings, and searches across all type variants before deciding the contact doesn't exist. The structural requirement is enforced by AnyCRM; it's not something the LLM can forget.",
      "competitorsAffected": ["My AI Front Desk", "Smith.ai", "Goodcall"]
    },
    {
      "title": "Calendar events that never surface on the contact",
      "raw": "OnePageCRM's calendar-event create looks like it creates a meeting on the contact — but only if you set <code>contact_id</code> on the payload. Omit it and OnePageCRM accepts the event, the user sees it on their calendar, but it never appears on the contact's record or on the Action Stream. <strong>My AI Front Desk's</strong> Zapier-style \"Add Follow-Up Action\" / \"Create Task\" actions don't surface the requirement to bind the event to a <code>contact_id</code>, so meetings created through that surface frequently land on the user's calendar but never on the contact's timeline. <strong>Smith.ai</strong> and <strong>Goodcall</strong> publish no OnePageCRM-specific integration; any path would be Zapier-mediated with the same orphan-event problem, and Goodcall additionally writes meetings to its own scheduler rather than as native OnePageCRM Calendar events.",
      "mcp": "<code>createOnepagecrmContactAppointment</code> always resolves the contact first, then writes the Calendar event with <code>contact_id</code> populated, so the event surfaces on the contact timeline and on the Action Stream — and the user prepping for the call actually sees the meeting on the record.",
      "competitorsAffected": ["My AI Front Desk", "Goodcall"]
    },
    {
      "title": "Inventing Lead Sources, statuses, and meeting types",
      "raw": "OnePageCRM's <code>lead_source_id</code> and <code>status_id</code> reference separate endpoints — they're not free text. Send <code>lead_source: \"Inbound Call\"</code> as a string and the create either rejects it or silently leaves the field unset. Meeting type / duration is similarly constrained by what your account uses for Calendar events. <strong>My AI Front Desk's</strong> Zapier-style \"Update Lead Status\" takes whatever the AI generates and posts it — there is no \"read your portal's real lead-status values first\" step in a Zapier path. A naive AI Receptionist will write \"AI\", then \"Inbound Call\", then \"Phone Lead\" across three calls, none of which resolve to a real <code>lead_source_id</code>, and the resulting records show up in reporting as Lead Source: <em>(none)</em>. <strong>Smith.ai</strong> and <strong>Goodcall</strong> publish no OnePageCRM-specific integration; any path would be Zapier-mediated, architecturally one-shot, with no portal-enum lookup step.",
      "mcp": "Setup bakes your real Lead Sources, statuses, and meeting types into the AI Receptionist's system prompt as a frozen table with their IDs. The AI Receptionist <em>can only</em> tag with sources, statuses, and meeting types that exist in your OnePageCRM account. Invalid-ID errors are structurally impossible.",
      "competitorsAffected": ["My AI Front Desk", "Smith.ai", "Goodcall"]
    },
    {
      "title": "Booking the wrong user's calendar",
      "raw": "OnePageCRM's calendar-event create happily accepts any <code>owner_id</code> in the payload, including inactive users or users on another team. <strong>My AI Front Desk's</strong> Zapier-style \"Assign Lead to Team Member\" takes whichever team-member name the AI generates and posts it — no \"is this person still active?\" check, no \"does this person own the existing contact?\" check. So a prospector-side qualification call gets booked on the closer's calendar, or worse, on a deactivated former employee. <strong>Goodcall</strong> publishes no OnePageCRM-specific integration; any path would be Zapier-mediated with the same problem, and Goodcall's scheduler assigns based on connector defaults rather than the lane the call actually belongs to. <strong>Smith.ai's</strong> human receptionists rely on the receptionist's memory of who handles what — fine on a Tuesday morning, less reliable on a Friday at 8pm with a relief receptionist.",
      "mcp": "<code>createOnepagecrmContactAppointment</code> resolves the right user from the lane + roster cache inside AnyCRM, filters out inactive users at setup, and refuses to book when the existing contact's <code>owner_id</code> contradicts the inferred lane — instead, AnyCRM surfaces the conflict so the call respects the existing owner. The AI Receptionist can't book on a calendar that isn't currently rostered for that lane.",
      "competitorsAffected": ["My AI Front Desk", "Goodcall", "Smith.ai (human tier)"]
    },
    {
      "title": "Forgetting the Next Action",
      "raw": "OnePageCRM's whole workflow runs off the Action Stream — a contact without a Next Action is invisible to the user the next time they log in. The public API lets you create a contact without an Action, and naive integrations regularly do. <strong>My AI Front Desk's</strong> Zapier surface flattens contact + action + note as three separate Zap steps; if a Zap fails between steps the contact lands without a Next Action — invisible on the Action Stream until a human notices. <strong>Smith.ai</strong> and <strong>Goodcall</strong> publish no OnePageCRM-specific integration; any path would be Zapier-mediated with the same non-atomic gap. The meeting is booked, the note is written, and the contact still falls through the cracks.",
      "mcp": "<code>createOrUpdatesOnepagecrmContact</code> and <code>createOnepagecrmContactAppointment</code> both write a Next Action atomically with the contact write — either the contact lands on the Action Stream or the whole operation fails. The AI Receptionist literally cannot create a contact OnePageCRM's workflow surface would render invisible.",
      "competitorsAffected": ["My AI Front Desk", "Smith.ai", "Goodcall"]
    },
    {
      "title": "Cancelling by deletion instead of preserving the audit trail",
      "raw": "A raw delete on a OnePageCRM Calendar event permanently removes it. There is no <code>reason</code> field, no cancellation outcome, no soft-state — the event disappears from the user's calendar and from the contact's timeline, and the user gets no signal of <em>why</em> it fell through. <strong>My AI Front Desk's</strong> Zapier-style cancel action (where exposed at all) issues a single delete — that's the only OnePageCRM operation Zapier exposes for it. <strong>Goodcall's</strong> cancellations go through its scheduler, not the OnePageCRM event — so the scheduler is updated but the contact's Action Stream never reflects the cancellation reason. <strong>Smith.ai</strong> publishes no OnePageCRM-specific integration; receptionists ask the caller why a meeting is cancelled, but the reason lands as a note rather than as a subject-flagged event, so reporting doesn't count it correctly.",
      "mcp": "<code>cancelOnepagecrmAppointment</code> requires email and reason. AnyCRM updates the event subject with a <code>[CANCELLED]</code> prefix, writes the reason as a dated Note on the contact's Action Stream, and rolls the Next Action forward — never issues a deletion — atomically. Cancellations stay queryable in the user's reporting, the audit trail survives, and the owning user can see exactly why the slot opened up.",
      "competitorsAffected": ["My AI Front Desk", "Goodcall", "Smith.ai"]
    },
    {
      "title": "Encoding your Next-Action policy in the prompt or in middleware",
      "raw": "<strong>My AI Front Desk</strong> ships a hardcoded \"Add Follow-Up Action\" that fires on every inbound call with a fixed shape. There is no \"only set the Next Action this way if the caller is actually qualified\" logic — the action is single-step, so every call lands with the same boilerplate Next Action, clogging the Action Stream with undifferentiated work. The moment you change your Action Stream conventions you have to go back into Zapier and rebuild the Zap. <strong>Goodcall</strong> publishes no OnePageCRM-specific integration; any path would be Zapier-mediated with the same drift problem — connector defaults six months ago are what it still does today. <strong>Smith.ai's</strong> human receptionists work from playbooks that drift out of date as your real Action Stream policy evolves.",
      "mcp": "AnyCRM does not encode your Next-Action policy at all. AnyCRM sends a clean lead event straight to your CRM, into the receiving flow we wire up for you at onboarding. YOUR flow decides what happens: new Next-Action template? Update the flow. New Lead-Source-inheritance rule? Update the flow. AnyCRM's behaviour stays consistent because AnyCRM's job stops at the conversation.",
      "competitorsAffected": ["My AI Front Desk", "Smith.ai", "Goodcall"]
    },
    {
      "title": "Web leads and AI Receptionist leads run on two separate conversion-tracking stacks",
      "raw": "<strong>Smith.ai, My AI Front Desk, and Goodcall</strong> all treat phone and chat conversions as separate from web form conversions. None of them fire a real conversion event into Google Ads, Facebook Ads, or LinkedIn Ads when the AI Receptionist closes a call. So your Ad platforms only see the website form-fills, the bidding optimises for that (lower-intent) audience, your Cost per Lead looks deceptively low, ROAS reporting becomes a fiction, and the high-intent traffic that picks up the phone stays invisible to your Ad stack. Worse, when these competitors DO fire any tracking, it's client-side — blocked by ad-blockers and degraded under iOS / Safari tracking restrictions.",
      "mcp": "AnyCRM runs your website conversions AND your AI Receptionist conversions through the same Conversion Lift pipeline. Same event shape, same source taxonomy, same delivery to your CRM, AND the same server-side conversion event into Google Ads, Facebook Ads, and LinkedIn Ads — using the verified origin of your registered domain. Server-side means it can't be blocked client-side and doesn't degrade on iOS or Safari. The result is what Smith.ai/My AI Front Desk/Goodcall structurally can't deliver: lower Cost per Lead, higher ROAS, smaller CAC, complete analytics funnels, and attribution that doesn't fragment between web and voice.",
      "competitorsAffected": ["Smith.ai", "My AI Front Desk", "Goodcall"]
    }
  ],
  "failureModesMeta": {
    "headline": "How most AI Receptionists built on <strong>Smith.ai, My AI Front Desk, or Goodcall</strong> fail for <strong>solo consultants, boutique agencies, B2B services, and small sales teams</strong> that use <span data-tpl-crm>OnePageCRM</span>. And why AnyCRM can't.",
    "lede": "Most AI Receptionists fail on OnePageCRM in the same handful of ways. Duplicate contacts, misshapen email/phone arrays, events that never surface on the contact, free-text Lead Sources, the wrong user's calendar, missing Next Actions that drop contacts off the Action Stream, deletions that erase the audit trail, hardcoded Next-Action policy that drifts away from your real Action Stream conventions, and conversion data that never reaches your ad platforms server-side. AnyCRM can't fail in any of these ways, because each failure was solved one layer down inside AnyCRM. And because AnyCRM delegates Next-Action policy to your CRM's own flow rather than trying to encode it, AND runs web and AI Receptionist conversions through a single unified conversion pipe instead of two disconnected stacks.",
    "closer": "The AI Receptionist is honest because AnyCRM doesn't let it lie. And AnyCRM is sophisticated because it doesn't pretend to own policy that belongs inside your CRM, while quietly fixing the conversion-tracking gap nobody else has thought to close."
  },
  "comparisonTable": {
    "headline": "AnyCRM vs Smith.ai, My AI Front Desk, Goodcall on <span data-tpl-crm>OnePageCRM</span>",
    "columns": [
      { "key": "anycrm", "label": "AnyCRM" },
      { "key": "smithai", "label": "Smith.ai" },
      { "key": "myaifrontdesk", "label": "My AI Front Desk" },
      { "key": "goodcall", "label": "Goodcall" },
      { "key": "onepagecrm_native", "label": "OnePageCRM native" }
    ],
    "rows": [
      {
        "capability": "Live OnePageCRM Calendar event booked DURING the call",
        "anycrm": "Yes. Native OnePageCRM Calendar event, user-matched, <code>contact_id</code> bound, surfaced on the contact timeline.",
        "smithai": "No published OnePageCRM-specific integration; any path would be Zapier-mediated with manual follow-up.",
        "myaifrontdesk": "Partial. Zapier-style action list without structural detail for <code>contact_id</code> binding.",
        "goodcall": "No published OnePageCRM-specific integration; Goodcall's own model is a scheduler hop, not a native OnePageCRM event.",
        "onepagecrm_native": "No native AI receptionist — Calendar events are created manually or via Lead Clipper / web forms after the fact."
      },
      {
        "capability": "Dedup-before-write on email and phone",
        "anycrm": "Yes. Always.",
        "smithai": "Manual; no published OnePageCRM-specific integration.",
        "myaifrontdesk": "No. Zapier surface is single-step create with no search-before-write.",
        "goodcall": "No published OnePageCRM-specific integration.",
        "onepagecrm_native": "No native dedup on create; manual merge from the UI only."
      },
      {
        "capability": "Preserves existing OnePageCRM <code>owner_id</code> on returning callers",
        "anycrm": "Yes. Existing owner is sacred.",
        "smithai": "Implicit, not guaranteed.",
        "myaifrontdesk": "No. \"Assign Lead to Team Member\" can overwrite.",
        "goodcall": "Depends on the connector's defaults.",
        "onepagecrm_native": "N/A — manual ownership only."
      },
      {
        "capability": "Routes by lane (closer / prospector / account manager)",
        "anycrm": "Yes. Lane is part of AnyCRM's roster.",
        "smithai": "Manual, depends on the receptionist.",
        "myaifrontdesk": "No.",
        "goodcall": "No.",
        "onepagecrm_native": "No lane routing — OnePageCRM has owners, not lanes."
      },
      {
        "capability": "Lead Source, status &amp; meeting types frozen from your real OnePageCRM values",
        "anycrm": "Yes. Read at setup, baked into the prompt as a frozen table.",
        "smithai": "Not API-enforced.",
        "myaifrontdesk": "No. Writes can fail on unknown values.",
        "goodcall": "No structural guard.",
        "onepagecrm_native": "N/A — manual entry only."
      },
      {
        "capability": "Mandatory Next Action on every captured contact",
        "anycrm": "Yes. Atomic with the contact write.",
        "smithai": "No structural guarantee.",
        "myaifrontdesk": "No. Non-atomic Zap steps can drop the action.",
        "goodcall": "No structural guarantee.",
        "onepagecrm_native": "Yes by convention but not enforced on API create."
      },
      {
        "capability": "Cancellation preserves the audit trail (subject-prefix + Note, not deletion)",
        "anycrm": "Yes. <code>[CANCELLED]</code> prefix + dated Note.",
        "smithai": "Manual; cancellation lands as a note, not a flagged event.",
        "myaifrontdesk": "No. Deletion strips the timeline.",
        "goodcall": "No. Cancellation happens in the scheduler, not the OnePageCRM event.",
        "onepagecrm_native": "N/A — manual deletion is the default behaviour."
      },
      {
        "capability": "Reschedule in place (no cancel-then-rebook)",
        "anycrm": "Yes.",
        "smithai": "Manual.",
        "myaifrontdesk": "No.",
        "goodcall": "No.",
        "onepagecrm_native": "Manual edit on the event."
      },
      {
        "capability": "Next-Action policy delegated to YOUR Action Stream's own flow",
        "anycrm": "Yes. Lead event delivered straight into your CRM, into the receiving flow we wire up at onboarding.",
        "smithai": "No. Policy lives in Zapier or in the receptionist's training.",
        "myaifrontdesk": "No. Hardcoded \"Add Follow-Up Action\" with a fixed shape.",
        "goodcall": "No. Connector-default behaviour.",
        "onepagecrm_native": "N/A — there is no AI layer."
      },
      {
        "capability": "Unified conversion pipe: web forms AND AI Receptionist → CRM + ad platforms server-side",
        "anycrm": "Yes. Same shape, same source taxonomy, same server-side delivery.",
        "smithai": "No. Web and voice run on separate stacks.",
        "myaifrontdesk": "No. Web and voice run on separate stacks.",
        "goodcall": "No. Web and voice run on separate stacks.",
        "onepagecrm_native": "No. OnePageCRM does not publish ad-platform server-side conversion delivery."
      },
      {
        "capability": "Server-side conversion events sent to Google Ads, Facebook Ads, LinkedIn Ads (origin = your registered domain)",
        "anycrm": "Yes. Every call and chat lead lands server-side.",
        "smithai": "No.",
        "myaifrontdesk": "No.",
        "goodcall": "No.",
        "onepagecrm_native": "No."
      },
      {
        "capability": "Source attribution stays consistent across web and voice",
        "anycrm": "Yes. <code>AI Receptionist Call</code>, <code>AI Receptionist Web</code>, plus your web form identifiers.",
        "smithai": "Manual / inconsistent.",
        "myaifrontdesk": "No standardised taxonomy.",
        "goodcall": "Whatever the underlying connector defaults to.",
        "onepagecrm_native": "Lead Source field, manually set."
      },
      {
        "capability": "Native AI receptionist published by the CRM vendor",
        "anycrm": "N/A — AnyCRM is the AI layer.",
        "smithai": "N/A.",
        "myaifrontdesk": "N/A.",
        "goodcall": "N/A.",
        "onepagecrm_native": "OnePageCRM does not publish a native AI receptionist. FastTrackr AI is its native AI meeting-assistant integration; the only native AI feature on the OnePageCRM Max plan is the AI Assistant (TL;DR) that summarises contact pages."
      },
      {
        "capability": "Scale ceiling",
        "anycrm": "Bounded by OnePageCRM API limits, not by staffing.",
        "smithai": "Bounded by human receptionist staffing.",
        "myaifrontdesk": "Bounded by Zapier rate limits and action contracts.",
        "goodcall": "Bounded by the scheduler-and-sync hop.",
        "onepagecrm_native": "Bounded by your own staff picking up the phone."
      }
    ],
    "footer": "Every row in this table is solved one layer down inside AnyCRM. Not in the prompt. Not by humans. Not by Zapier. Smith.ai and Goodcall do not publish OnePageCRM-specific integration pages; any path between them and OnePageCRM would be Zapier-mediated with the structural failure modes above."
  },
  "faqs": [
    {
      "q": "Does this actually work with my OnePageCRM account?",
      "a": "Yes — AnyCRM uses OnePageCRM's official API (User ID + API key over HTTP Basic). Every captured caller lands as a contact with the right owner, the right Lead Source, a first Note from the call, and a dated Next Action on the Action Stream. Meetings land as native Calendar events tied to the contact with <code>contact_id</code> set, so they surface on the contact's timeline."
    },
    {
      "q": "Will it create duplicate contacts in OnePageCRM?",
      "a": "No. AnyCRM resolves the existing contact first (normalising email and phone) before writing. A returning caller becomes a new Note and a refreshed Next Action on the existing record, never a second contact — and the existing <code>owner_id</code> is preserved."
    },
    {
      "q": "Can it route different inquiries to different users on my team?",
      "a": "Yes. AnyCRM reads your OnePageCRM user roster once at setup — every user with their lane, meeting types, and timezone. Sales-side, qualification-side, and customer-side calls each route differently, and existing contact ownership in OnePageCRM is always preserved."
    },
    {
      "q": "Where do the meetings actually live — calendar or OnePageCRM?",
      "a": "Both. AnyCRM writes the meeting as a native OnePageCRM Calendar event with <code>contact_id</code> set so it surfaces on the contact timeline and the Action Stream, and with <code>owner_id</code> set to the routed-to user so it appears on their calendar. You see one clean event in OnePageCRM, one event on the user's calendar, one source-attributed contact with a dated Next Action."
    },
    {
      "q": "Can it cancel or reschedule a meeting from a phone call?",
      "a": "Yes. The caller gives their email, AnyCRM finds the soonest upcoming event linked to the matching contact, the AI Receptionist reads it back, and AnyCRM either reschedules in place (with the Next Action rolled forward) or cancels with a <code>[CANCELLED]</code> subject prefix and the reason as a dated Note — never a deletion that would wipe the audit trail."
    },
    {
      "q": "Does OnePageCRM have its own AI receptionist?",
      "a": "No. OnePageCRM does not publish a native AI receptionist. FastTrackr AI is OnePageCRM's native AI meeting-assistant integration; the only native AI feature on the OnePageCRM Max plan is the AI Assistant (TL;DR), which summarises contact pages. None of these answer the phone. The AI Receptionist with AnyCRM is the missing voice / chat layer in front of all of them."
    },
    {
      "q": "Does it handle timezones correctly?",
      "a": "Yes. The AI Receptionist confirms the caller's country/timezone, AnyCRM books in the event owner's local timezone (which is how OnePageCRM stores Calendar event times internally), and the AI Receptionist reads the time back to the caller in <em>their</em> local timezone. No customer-facing UTC strings, no off-by-an-hour confirmations."
    },
    {
      "q": "Does every captured contact get a Next Action?",
      "a": "Yes — always. A OnePageCRM contact without a Next Action falls off the Action Stream, which is where the workflow actually happens. AnyCRM writes the Next Action atomically with the contact, with a date the user actually sees the next time they log in."
    },
    {
      "q": "How does the conversion tracking work?",
      "a": "Every lead event AnyCRM produces (from a phone call, a chat conversation, OR a website form) flows through a single conversion pipe. It lands in your CRM for Action-Stream logic. AND it fires server-side into Google Ads, Facebook Ads, and your analytics platform, using the origin of the domain you registered with AnyCRM. Server-side means the conversion can't be blocked by ad-blockers and doesn't degrade under iOS / Safari tracking restrictions. The result: higher ROAS, lower ad costs, enriched analytics, and attribution that doesn't fragment between web and voice. As far as we can tell, none of our competitors have built this yet."
    },
    {
      "q": "What about my existing website forms? Do they go through the same pipe?",
      "a": "Yes — that's the whole point. Web forms AND the AI Receptionist produce the same lead-event shape with the same source taxonomy. They land in the same place in your CRM, and they fire the same server-side conversion event into your ad platforms. So your bid strategy optimises against unified, real conversions instead of fragmenting across web-only and voice-only stacks."
    },
    {
      "q": "How long until it's actually capturing inquiries into OnePageCRM?",
      "a": "Most teams are live the same afternoon. The API key + User ID pair takes a minute; the roster + Lead Sources + statuses + meeting-types import is automatic; we wire up the lead-receiving flow inside your CRM during onboarding; the phone integration is usually under an hour. Web chat is faster."
    }
  ]
}
