{
  "icp": "marketing, sales, and service teams already running their pipeline on HubSpot — B2B SaaS, agencies, professional services, and growth-stage companies that book meetings on the phone",
  "capabilities": {
    "availability": {
      "headline": "Captures the website inquiry or caller as a HubSpot contact, books the meeting if there's real intent, and feeds one unified conversion pipe for your website forms AND your AI Receptionist.",
      "lede": "Every caller who lands on the line becomes a HubSpot contact (with the right associated company, lifecycle stage, and original-source attribution). When they want a meeting, AnyCRM creates a HubSpot meeting engagement on the matched team member's calendar. 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 CRM business logic and your Google / Facebook / LinkedIn Ads both stay in sync.",
      "cards": [
        {
          "num": "A.01",
          "title": "Every caller becomes a HubSpot contact, not a stray call recording",
          "body": "The AI Receptionist captures first name, last name, email, phone, associated company, and call intent. Then AnyCRM writes the record into HubSpot with the right team member owner, lead status, and lifecycle stage attached DURING the call."
        },
        {
          "num": "A.02",
          "title": "Books meetings as native HubSpot engagements",
          "body": "The meeting lands as a HubSpot meeting engagement with the matched team member as organizer, the contact and company associated, and a duration that matches your configured meeting type. So it shows on the contact timeline and the team member's calendar exactly the way HubSpot expects."
        },
        {
          "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 deal-creation rules. 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 business logic takes over. Open the Deal, set the stage, assign the pipeline, route the workflow. 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 policy you've already encoded."
        }
      ],
      "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 associates the company, sets the team member owner (matched from your team), writes the meeting engagement so HubSpot's calendar sync to Google/Outlook fires automatically, 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": [
        "getHubspotAvailability",
        "createHubspotContactAppointment"
      ],
      "curl1Path": "/mcp/tools/getHubspotAvailability",
      "curl2Path": "/mcp/tools/createHubspotContactAppointment",
      "pipeIntro": "Most businesses run two completely separate conversion-tracking stacks: one for the website (forms, chatflows, 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 / chatflow 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 CRM, into the receiving flow we wired up for you at onboarding. Your business logic decides what happens next: which Deal, which pipeline, which stage, which workflow, which team channel. 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, web chat, 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 CRM's flow owns deal-creation, pipeline assignment, and stage routing. 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 when a Deal is created, what pipeline it goes in, and which source tag to apply. That approach breaks the moment your business 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 CRM (for business 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 and chatflows 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 CRM 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 CRM for business 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": [
        "createOrUpdatesHubspotContact",
        "createHubspotContactAppointment"
      ]
    },
    "lifecycle": {
      "headline": "Manages the full meeting lifecycle inside HubSpot for anyone calling or chatting.",
      "lede": "Every \"push the Discovery Call to Thursday\" or \"actually, cancel that\" lands with the AI Receptionist instead of in your email inbox. AnyCRM reschedules update the existing HubSpot engagement in place. Cancellations follow HubSpot's own best practice. Outcome flagged, reason recorded on the timeline. Instead of deleting the meeting and erasing the audit trail, you get crystal clarity on when a HubSpot Engagement was created, and when and why it was updated by your AI Receptionist.",
      "cards": [
        {
          "num": "B.01",
          "title": "Finds the meeting by email in a single step without needing a HubSpot engagement ID",
          "body": "Customers DO NOT quote engagement IDs over the phone. We've tested with hundreds of callers and each time they were asked 'Can you tell me the meeting id from your email?', the response was the same: 'Why can't you find it yourself?'. AnyCRM gives the AI Receptionist an easy way to find the soonest upcoming meeting engagement associated to the matching contact. And the AnyCRM response forces the AI Receptionist to be human. It reads back the title, date, time, and team member owner before changing anything."
        },
        {
          "num": "B.02",
          "title": "Reschedules in place and keeps the engagement data clean",
          "body": "Rescheduling updates the existing engagement in a single confirmation. No cancel-then-rebook round-trip means the engagement history, contact association, and calendar invite all stay intact. Failed reschedules leave the original engagement untouched."
        },
        {
          "num": "B.03",
          "title": "Cancels without erasing the audit trail",
          "body": "When a caller cancels, AnyCRM flags the meeting cancelled the way HubSpot's own reporting expects. Then it writes the caller's reason onto the contact timeline, instead of deleting the engagement and stripping WHY the meeting fell through. This lets you intuitively track changes for HubSpot engagements created or updated by your AI Receptionist."
        }
      ],
      "apiSummary": "AnyCRM's search, reschedule, and cancel all accept just an email. The soonest upcoming meeting engagement associated to the matching contact is resolved inside AnyCRM. No engagement IDs at the AI Receptionist layer.",
      "tools": [
        "searchHubspotAppointments",
        "rescheduleHubspotAppointment",
        "cancelHubspotAppointment"
      ],
      "curl1Path": "/mcp/tools/searchHubspotAppointments",
      "curl2Path": "/mcp/tools/rescheduleHubspotAppointment",
      "curl3Path": "/mcp/tools/cancelHubspotAppointment"
    },
    "routing": {
      "headline": "Routes every caller to the right team member. And maintains the existing team member looking after the lead instead of randomly reassigning to someone else.",
      "lede": "HubSpot accounts run on owners, teams, and pipelines. At setup AnyCRM imports your HubSpot team into its database and enriches each team member with lane, expertise, languages, timezone, and bookable meeting-type duration. The AI Receptionist then routes each caller to the team member who actually handles that lane. Existing contact ownership in HubSpot is honoured as the source of truth.",
      "cards": [
        {
          "num": "C.01",
          "title": "Routes by lane: AE vs SDR vs CS",
          "body": "\"I'd like to talk to someone about pricing\" routes to your AE pool. \"I'm still evaluating\" routes to an SDR for qualification. \"I'm already a customer and have a question\" routes to the CSM looking after the account. And the existing owner on the contact is always preserved."
        },
        {
          "num": "C.02",
          "title": "Honours existing assigned owners in HubSpot",
          "body": "If a contact already has an owner in HubSpot, the AI Receptionist doesn't reassign them. The meeting and the note attach to the existing contact under the existing owner. No orphaned duplicate, no lead poached off a team member's pipeline."
        },
        {
          "num": "C.03",
          "title": "Matches fresh inbound callers and website chatters to the right person on the team",
          "body": "New leads with no existing HubSpot contact get matched to a team member on the lane you've designated (AE, SDR, CS), honouring the criteria you set in AnyCRM for matching a lead to a team member. The AI Receptionist doesn't fight the rules you already use."
        }
      ],
      "apiSummary": "Team details live in AnyCRM's database, pulled once from HubSpot at setup, enriched with lane, expertise, languages, timezone, and meeting-type duration (valuable context for the AI Receptionist that HubSpot doesn't provide by default). At runtime, one read of the team roster matches caller → lane → team member. New contacts get assigned to the right team member. Existing contacts keep theirs. AnyCRM does NOT cache your deal pipelines, your stages, or your lifecycle workflows. That policy stays inside your CRM, where it belongs.",
      "tools": [
        "listHubspotTeamMembers",
        "getHubspotUserProfile"
      ],
      "curl1Path": "/mcp/tools/listHubspotTeamMembers",
      "curl2Path": "/mcp/tools/getHubspotUserProfile"
    }
  },
  "setup": {
    "headline": "Setup in 3 steps. Battle-tested on real <span data-tpl-crm>HubSpot</span> accounts.",
    "lede": "You connect <span data-tpl-crm>HubSpot</span> once. AnyCRM imports your team and your meeting types. AnyCRM also wires up the receiving end inside your CRM so lead events from the AI Receptionist land where your business logic can act on them. Then the AI Receptionist starts capturing leads and booking meetings the same afternoon. No middleware. No prompt-engineering by you.",
    "steps": [
      {
        "num": "S.01",
        "title": "Connect HubSpot (OAuth, 60 seconds)",
        "body": "Authorize AnyCRM on your HubSpot account via the standard OAuth grant. AnyCRM scopes to the least amount of access needed for the booking lifecycle. Nothing for marketing email, ads, or billing. You can always revoke permissions at any time from Settings → Integrations → Connected Apps. Every update to your HubSpot is signed with AnyCRM's connected-app credentials so it's easy to track what the AI Receptionist did when you audit."
      },
      {
        "num": "S.02",
        "title": "Import the team. Lock in your meeting types. Wire up your CRM's lead-receiving flow.",
        "body": "AnyCRM imports every active HubSpot owner as a bookable team member with lane, expertise, languages, timezone, and meeting-type duration. AnyCRM also freezes the meeting types so the AI Receptionist can only book types you actually use, and locks inbound-call source attribution (always <code>AI Receptionist Call</code> or <code>AI Receptionist Web</code>) so reporting stays consistent. During onboarding we set up the receiving flow inside your CRM so the lead events from the AI Receptionist land where your business logic can act on them. AnyCRM does NOT replicate your deal pipelines, stages, or lifecycle workflows. Your CRM 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 team roster, same HubSpot 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 HubSpot's <strong>Meetings tool</strong> + Forms + chatflow bots?",
      "body": "HubSpot's Meetings scheduler, Forms, and chatflow bots are excellent at the steps AFTER a lead has chosen to come to you via your website. They don't pick up the phone. A new caller at 9pm gets a missed call, not a contact record. A form sits in the submissions queue until someone reads it. Chatflows run on the website only, with no voice surface. 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 HubSpot engagement on the right team member's calendar, writes a clean contact (with the source set to <code>AI Receptionist Call</code> or <code>AI Receptionist Web</code>, lifecycle stage, and a call summary as the first note), AND sends the same lead event straight into your CRM's downstream business logic plus your ad platforms server-side. So your HubSpot workflows, your analytics, and your Google / Facebook Ads bidding all start optimising on a real conversation, not a name and a missed call."
    },
    "enrichmentSummary": "Every tool the AI Receptionist calls is an opinionated wrapper inside AnyCRM. AnyCRM does the messy work for you. Dedup, company association, lifecycle-stage mapping, meeting-type resolution, timezone math, association labels, error handling, 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 lead",
        "raw": "Writing a contact straight into HubSpot looks simple. But HubSpot's dedup on email is exact-match only, and there's no dedup on phone at all. Send the same caller with a slightly different email casing or a phone-only inquiry, and you end up with two contacts. Lifecycle stage carries its own gotcha. HubSpot treats it as directional, so writing an earlier stage on an existing contact is silently ignored. Lead status uses account-specific values that differ by portal. Inbound-call source attribution has to be set when the contact is created. And nothing in raw HubSpot fires a server-side conversion event to your ad platforms, so call-driven and chat-driven leads never get optimised for.",
        "mcp": "<code>createOrUpdatesHubspotContact</code> accepts <code>name</code>, <code>email</code>, <code>phone</code>, <code>note</code>, <code>company</code>, <code>lead_intent</code>, plus the matched team member. AnyCRM handles dedup, picks the surviving record (or creates a new one with the right values in the right order), creates or associates the company, sets the team member owner, appends a note, 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 meeting engagement directly against HubSpot is a tight contract. The time format has to be exactly what HubSpot accepts (not ISO-8601), the team member owner has to be set on the right field, and the contact + company associations have to use the right labels. Get any of these wrong and the meeting writes into HubSpot but never lands on the team member's actual Google/Outlook calendar. Skip the company association and the meeting won't surface on the company record either.",
        "mcp": "<code>createHubspotContactAppointment</code> takes <code>email</code>, <code>scheduled_datetime</code> (a naive date and time, no offset needed), <code>invitee_timezone</code>, and <code>meeting_type_key</code>. AnyCRM resolves the right team member from the lane, handles the timezone and duration math, builds the associations correctly, sends the same 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 meeting in HubSpot strips it off the contact timeline entirely. No reason, no audit trail, no signal to the team member of WHY it fell through. HubSpot's own best practice is to flag the engagement cancelled instead of deleting it, so it stays queryable in reporting and on the timeline. Doing that cleanly takes several round-trips: read the meeting, write a note with the reason, then update the engagement.",
        "mcp": "<code>cancelHubspotAppointment</code> takes <code>email</code> and <code>reason</code>. AnyCRM resolves the soonest upcoming meeting, records the reason on the contact timeline, and flags the meeting cancelled. All in one AnyCRM call. No deletion, full audit trail, meeting stays on the timeline and in the team member's reporting."
      }
    ],
    "alignmentSummary": "Every AnyCRM tool for HubSpot follows the same AI-alignment contract, so the AI Receptionist never has to think about transport:",
    "alignment": [
      "<strong>Naive datetimes in, HubSpot-native shape out.</strong> The AI Receptionist passes <code>2026-05-15T11:00:00</code> and a timezone string. AnyCRM converts it into whatever shape the HubSpot meeting engagement requires, on both start and end.",
      "<strong>Email is the identity.</strong> Cancel and reschedule never need an engagement ID at the AI Receptionist layer. Email and soonest-upcoming resolves inside AnyCRM.",
      "<strong>Lead status and meeting type come from setup, not the LLM.</strong> The AI Receptionist can't invent a lead status or a meeting type. It inherits the values you configured at setup.",
      "<strong>Existing team member owners are sacred.</strong> If a HubSpot contact already has an owner, AnyCRM preserves it. New contacts only get the matched team member when no owner exists.",
      "<strong>Cancellation preserves the audit trail.</strong> HubSpot's best practice for cancelled meetings is honoured so the timeline stays intact and reporting still counts the meeting under the right outcome.",
      "<strong>Every lead event leaves AnyCRM in two places at once.</strong> Your CRM gets the lead event so your business 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 HubSpot 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 HubSpot engagement is preserved. The customer never ends up with nothing."
    ],
    "industryLine": "Currently running for <strong>B2B SaaS sales teams, marketing agencies, consultancies, and professional services</strong>. Anyone whose pipeline is in HubSpot but whose phone keeps ringing after the AE has logged off.",
    "teamsSetup": {
      "headline": "Multi-team-member setup. Team roster, lanes & system-prompt assembly",
      "body": "If you run more than one team member on HubSpot, AnyCRM imports the team roster once, you link each team member to the lanes they actually cover (AE / SDR / CSM / pre-sales), 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 team roster on every call. It already knows who handles what.",
      "steps": [
        "<strong>Team roster import.</strong> AnyCRM imports your HubSpot team members once and writes each one into its database keyed by <code>crm_user_id</code> (with name, role, lane, timezone, teams).",
        "<strong>Per-team-member meeting types.</strong> For each team member 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 deal-creation policy lives. AnyCRM doesn't try to own it.",
        "<strong>System-prompt assembly.</strong> The cached team roster, lane, and 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 team roster lookup. Updates to team members, 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 demo the platform with someone on the sales team\" → the AE team → that team member's product-demo meeting type → that team member's calendar availability → a booked HubSpot meeting engagement on the right team member's calendar → a lead event delivered straight into your CRM → a server-side conversion event in your ad platforms. Without a single team roster query during the call."
    }
  },
  "privacy": {
    "headline": "Your <span data-tpl-crm>HubSpot</span> data passes through AnyCRM. It doesn't stick.",
    "lede": "AnyCRM processes your <span data-tpl-crm>HubSpot</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, meetings, notes. All of it stays in HubSpot, owned by your HubSpot 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, HubSpot contact IDs, your meeting types beyond their identifiers, your contact data. 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 HubSpot portal and in whatever systems your CRM's flow forwards lead events to.</strong> Contacts, companies, meetings, notes all live in HubSpot. 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 AnyCRM connected-app OAuth grant in your HubSpot portal (Settings → Integrations → Connected Apps) 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": "HubSpot uses granular OAuth scopes. AnyCRM requests only the smallest set required for the contact + meeting capture lifecycle. Nothing for marketing email, nothing for ads, nothing for billing, nothing for deal-policy enforcement (that's your webhook's job).",
    "scopes": [
      "<strong>Contacts (read + write).</strong> Read and write contacts, dedup against existing records, set source attribution and lifecycle stage.",
      "<strong>Companies (read + write).</strong> Create or associate the caller's company and link it to the contact and meeting engagements.",
      "<strong>Owners (read).</strong> Read your team roster at setup so the AI Receptionist knows who exists and who owns existing contacts.",
      "<strong>Engagements (read + write).</strong> Read existing meeting engagements (for reschedule and cancel) and write new ones on the right team member's calendar.",
      "<strong>Schema (read).</strong> Read your account-specific values for lifecycle stage and lead status at setup, so AnyCRM writes only valid values.",
      "<strong>Not requested:</strong> marketing email, ads, workflows admin, social, files, billing / subscription data, deals (deal-creation policy stays inside your CRM's own flow), your other integrations."
    ],
    "surfaceNote": "Same OAuth grant any HubSpot connected app uses. Just a smaller surface. AnyCRM holds the access and refresh tokens (every write is signed by AnyCRM's connected-app credentials, so each engagement and contact change is attributable to AnyCRM in HubSpot's audit log). The LLM never sees the token, and every tool call is logged with the operation name, never the raw payload."
  },
  "failureModes": [
    {
      "title": "Duplicate contacts",
      "raw": "HubSpot's default contact dedup is strict. Exact email match, case-sensitive, trim-sensitive, and no dedup on phone. Send the same caller with a slightly different email casing, with whitespace, or by phone alone, and you get a second contact with a different team member owner and a different timeline. <strong>My AI Front Desk</strong> runs on a Zapier-style \"Create Contact\" action — a single API call that hands the caller's email straight to HubSpot's default dedup. Same caller, slightly different casing? Duplicate. Phone-only? Duplicate. <strong>Goodcall</strong> writes through a connector that does the same single-step create. <strong>Smith.ai's AI tier</strong> logs the contact after the call through a similar one-shot create. None of these can do a \"search-then-write\" because their architecture is one call in, one call out.",
      "mcp": "AnyCRM does NOT do a one-shot create. AnyCRM first searches HubSpot 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 on the timeline, never as a duplicate. This costs us an extra API call per contact-create. We do it anyway, because the alternative is the duplicate-contact mess Smith.ai, My AI Front Desk, and Goodcall users live with.",
      "competitorsAffected": ["My AI Front Desk", "Goodcall", "Smith.ai (AI tier)"]
    },
    {
      "title": "Meetings that don't reach the team member's real calendar",
      "raw": "Writing a meeting engagement to HubSpot looks like it creates a calendar event. And it does, but only inside HubSpot. Whether it actually syncs to the team member's Google/Outlook calendar depends on the engagement being assembled correctly. The right team member field, the right time format, the right association labels. <strong>My AI Front Desk's</strong> Zapier-style \"Schedule Meeting\" action posts whatever it has straight at HubSpot — no checking the time format, no validating the association labels, no confirming the team member actually has a connected calendar. <strong>Goodcall</strong> doesn't write a HubSpot engagement at all; it writes to a connected scheduler, and then a separate Zap or sync tries to mirror it back into HubSpot — so the engagement either doesn't exist in HubSpot, or exists but never syncs to Google/Outlook. Either way, the team member opens their calendar and the meeting isn't there.",
      "mcp": "AnyCRM does multiple things in one call: looks up the team member's HubSpot ID, validates the time format HubSpot's calendar sync requires, builds the contact + company association labels HubSpot's timeline expects, then writes the engagement. The meeting lands in HubSpot AND on the team member's Google/Outlook calendar atomically. We do four checks where Smith.ai/My AI Front Desk/Goodcall do one. That's why a meeting booked through AnyCRM is never missing from the team member's calendar.",
      "competitorsAffected": ["My AI Front Desk", "Goodcall"]
    },
    {
      "title": "Inventing meeting types and lead statuses that don't exist in your portal",
      "raw": "HubSpot's lead status, lifecycle stage, and meeting types are all account-specific — the actual values differ from portal to portal. <strong>My AI Front Desk's</strong> Zapier-style action 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; it's a single action. So the AI invents a value like \"Hot Lead\" when your portal only accepts \"NEW,\" the write fails (or worse, succeeds silently with the wrong value), and your reporting silently breaks. <strong>Goodcall's</strong> connector hands the value through to HubSpot the same way. <strong>Smith.ai's</strong> AI tier picks values from a generic playbook that doesn't match your portal's enums. The architecture is one-shot; there is no \"check the portal first\" step.",
      "mcp": "AnyCRM reads your portal's real values at setup, in a separate call to HubSpot's schema API, and bakes them into the AI Receptionist's system prompt as a frozen table. So when the AI Receptionist captures a lead, it CAN ONLY pick from values that actually exist in your portal. This is two API calls at setup time that Smith.ai, My AI Front Desk, and Goodcall don't make — and it's the difference between writes that always succeed and writes that silently rot your reporting.",
      "competitorsAffected": ["My AI Front Desk", "Goodcall"]
    },
    {
      "title": "Booking the wrong team member's calendar",
      "raw": "HubSpot happily accepts any team member on a meeting engagement, including deactivated team members or team members from another team whose calendar isn't connected. <strong>My AI Front Desk's</strong> Zapier action 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 an SDR-side qualification call gets booked on the CSM's calendar, or worse, on a deactivated former employee. <strong>Goodcall's</strong> scheduler hop 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": "AnyCRM does the heavy work in multiple steps: matches the lane (sales / qualification / customer-success) from the call's intent, looks up the right team member from the AnyCRM team roster, filters out deactivated team members, AND checks whether the existing HubSpot contact already has an owner. If the existing owner contradicts the inferred lane, AnyCRM refuses to overwrite — instead, the AI Receptionist surfaces the conflict so the call respects who is already on the contact. Smith.ai/My AI Front Desk/Goodcall can't do this because their architecture is one-shot.",
      "competitorsAffected": ["Smith.ai (human tier)", "Goodcall", "My AI Front Desk"]
    },
    {
      "title": "Cancelling by deletion instead of by outcome",
      "raw": "Deleting a meeting from HubSpot strips the engagement off the contact timeline entirely. No reason, no cancellation outcome, no audit trace. <strong>My AI Front Desk's</strong> Zapier-style cancel action (where it exists at all) issues a single DELETE — that's the only HubSpot operation Zapier exposes for it. The engagement vanishes, the team member gets no signal of WHY it fell through, and \"meetings booked vs cancelled\" reporting breaks because the meeting no longer exists to be counted. <strong>Goodcall's</strong> cancellation goes through its scheduler, not the HubSpot engagement — so the scheduler is updated but the HubSpot timeline never reflects the cancellation reason. <strong>Smith.ai</strong> receptionists ask the caller why, but the cancellation lands as a note rather than as a properly outcome-flagged engagement, so HubSpot's reporting doesn't count it correctly.",
      "mcp": "AnyCRM's cancellation is multi-step: find the soonest upcoming engagement, capture the caller's reason, write the reason onto the contact timeline as a note, AND flag the engagement cancelled the HubSpot-native way. The engagement stays on the timeline, queryable in reporting, with the reason attached. Three operations where Smith.ai/My AI Front Desk/Goodcall do one (and usually the wrong one).",
      "competitorsAffected": ["My AI Front Desk", "Goodcall"]
    },
    {
      "title": "Encoding your deal-creation policy in the prompt or in middleware",
      "raw": "<strong>My AI Front Desk</strong> ships a hardcoded \"Create Deal\" action that fires on every inbound call. There is no \"only create the Deal if the caller is actually ready to buy\" logic — the action is single-step, so every call becomes a stage-1 Deal in the default pipeline, clogging your forecast with unqualified records. Worse, the moment you change your pipeline structure or add a new stage, you have to go back into Zapier and rebuild the zap. <strong>Goodcall's</strong> connector applies whatever default behaviour the underlying integration shipped with — change your business, and the connector keeps doing what it did six months ago. <strong>Smith.ai's</strong> AI tier and human receptionists work from playbooks that drift out of date as your real CRM policy evolves.",
      "mcp": "AnyCRM does not encode your deal 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 pipeline? Update the flow. New stage? Update the flow. New source-tag scheme? Update the flow. AnyCRM's behaviour stays consistent because AnyCRM's job stops at the conversation. Smith.ai/My AI Front Desk/Goodcall can't separate these concerns because their architecture forces business policy into either Zapier middleware or a hardcoded action.",
      "competitorsAffected": ["My AI Front Desk", "Goodcall", "Smith.ai (AI tier)"]
    },
    {
      "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 / chatflow 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>B2B SaaS sales teams, marketing agencies, consultancies, and professional services</strong> that use <span data-tpl-crm>HubSpot</span>. And why AnyCRM can't.",
    "lede": "Most AI Receptionists fail on HubSpot in the same handful of ways. Duplicate contacts, meetings that never sync to the team member's real calendar, invented meeting types and lead statuses, the wrong team member's calendar, deletions that destroy the audit trail, hardcoded deal-creation rules that drift away from your real policy, 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 deal-creation 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>HubSpot</span>",
    "columns": [
      { "key": "anycrm", "label": "AnyCRM" },
      { "key": "smithai", "label": "Smith.ai" },
      { "key": "myaifrontdesk", "label": "My AI Front Desk" },
      { "key": "goodcall", "label": "Goodcall" }
    ],
    "rows": [
      {
        "capability": "Live HubSpot meeting engagement booked DURING the call",
        "anycrm": "Yes. Native HubSpot meeting engagement, team-member-matched, calendar-synced.",
        "smithai": "No. Note logged for manual follow-up.",
        "myaifrontdesk": "Partial. Zapier-style \"Schedule Meeting\" without structural detail for calendar sync.",
        "goodcall": "Partial. Scheduler hop, not a native HubSpot engagement."
      },
      {
        "capability": "Dedup-before-write on email and phone",
        "anycrm": "Yes. Always.",
        "smithai": "Manual.",
        "myaifrontdesk": "No. Zapier dedup is exact-match only.",
        "goodcall": "No published guarantee."
      },
      {
        "capability": "Preserves existing HubSpot owner on returning callers",
        "anycrm": "Yes. Existing owner is sacred.",
        "smithai": "Implicit, not guaranteed.",
        "myaifrontdesk": "No. Can overwrite.",
        "goodcall": "Depends on the underlying connector's defaults."
      },
      {
        "capability": "Routes by lane (AE / SDR / CSM)",
        "anycrm": "Yes. Lane is part of AnyCRM's team roster.",
        "smithai": "Manual, depends on the receptionist.",
        "myaifrontdesk": "No.",
        "goodcall": "No."
      },
      {
        "capability": "Lead status & meeting types frozen from your real portal 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."
      },
      {
        "capability": "Cancellation preserves the audit trail (outcome-flagged, not deleted)",
        "anycrm": "Yes. HubSpot-native cancellation.",
        "smithai": "Manual.",
        "myaifrontdesk": "No. Deletion strips the timeline.",
        "goodcall": "No. Cancellation happens in the scheduler, not the engagement."
      },
      {
        "capability": "Reschedule in place (no cancel-then-rebook)",
        "anycrm": "Yes.",
        "smithai": "Manual.",
        "myaifrontdesk": "No.",
        "goodcall": "No."
      },
      {
        "capability": "Deal-creation policy delegated to YOUR CRM'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 \"Create Deal\" action.",
        "goodcall": "No. Connector-default behaviour."
      },
      {
        "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 to your CRM and your ad platforms.",
        "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."
      },
      {
        "capability": "Server-side conversion events sent to Google Ads, Facebook Ads, and analytics (origin = your registered domain)",
        "anycrm": "Yes. Every call and chat lead lands server-side.",
        "smithai": "No.",
        "myaifrontdesk": "No.",
        "goodcall": "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."
      },
      {
        "capability": "Scale ceiling",
        "anycrm": "Bounded by HubSpot 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."
      }
    ],
    "footer": "Every row in this table is solved one layer down inside AnyCRM. Not in the prompt. Not by humans. Not by Zapier."
  },
  "faqs": [
    {
      "q": "Does this actually work with my HubSpot portal?",
      "a": "Yes. AnyCRM uses HubSpot's official API via a standard OAuth grant. Every captured caller lands as a Contact with the right team member owner, lifecycle stage, lead status, and original-source attribution, plus a first Note from the call. Meetings land as native HubSpot meeting engagements on the right team member's calendar, associated to the contact and company so they show on every timeline."
    },
    {
      "q": "Will it create duplicate Contacts in HubSpot?",
      "a": "No. AnyCRM resolves the existing contact first (normalising email and phone) before writing. A returning caller becomes a new Note on the existing record, never a second contact, and the existing team member owner is preserved."
    },
    {
      "q": "Can it route different leads to different team members?",
      "a": "Yes. AnyCRM reads your HubSpot team roster once at setup. Every active team member, with their lane (AE/SDR/CS), teams, meeting types, and timezone. Sales-side, qualification-side, and customer-side calls each route differently, and existing contact ownership in HubSpot is always preserved."
    },
    {
      "q": "Where do the meetings actually live, calendar or HubSpot?",
      "a": "Both. AnyCRM writes the meeting as a native HubSpot meeting engagement with the right team member, the right associations, and the right timing. Which makes HubSpot's Google/Outlook calendar sync fire automatically. You see one engagement on the contact timeline, one calendar invite on the team member's calendar, one source-attributed contact."
    },
    {
      "q": "Can it cancel or reschedule a meeting from a phone call?",
      "a": "Yes. The caller gives their email, AnyCRM finds the soonest upcoming meeting engagement associated to the matching contact, the AI Receptionist reads it back, and AnyCRM either reschedules in place or flags the meeting cancelled the way HubSpot's reporting expects (with the reason captured on the contact timeline). Never a deletion that would strip the audit trail."
    },
    {
      "q": "What if a caller has two upcoming meetings in HubSpot?",
      "a": "AnyCRM returns every upcoming meeting engagement for that contact (title, date, time, team member owner) and the AI Receptionist asks which one to change before doing anything. It never assumes."
    },
    {
      "q": "Does it handle timezones correctly?",
      "a": "Yes. The AI Receptionist confirms the caller's country/timezone, AnyCRM converts the meeting time into the format the HubSpot engagement requires, 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 it create Deals?",
      "a": "Not directly. AnyCRM stays focused on the conversation surface: capturing the contact, matching the right team member, booking the meeting. Deal creation is YOUR business policy, and that policy lives inside your CRM, in the receiving flow we wire up for you at onboarding. Every contact-create and every meeting-book in AnyCRM sends a lead event straight into that flow (tagged with source <code>AI Receptionist Call</code> or <code>AI Receptionist Web</code>). Your flow decides which pipeline, which stage, which source tag, which workflow trigger. AnyCRM doesn't try to encode policy that will drift out of date the moment your business changes."
    },
    {
      "q": "How does the conversion tracking work?",
      "a": "Every lead event AnyCRM produces (from a phone call, a chat conversation, OR a website form / chatflow) flows through a single conversion pipe. It lands in your CRM for business 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 / chatflows 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 leads into HubSpot?",
      "a": "Most teams are live the same afternoon. The OAuth grant takes a minute. The team roster and 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."
    }
  ]
}
