Sign In
← Back to Docs
Integrations · Setup

Integrations Guide

Connect your CRM, ad platforms, call tracking, and ecommerce tools to PPC TNT. Once connected, all your revenue and spend data flows into the dashboard automatically — no manual data entry, no spreadsheets.

How integrations work

Each integration uses an API key or OAuth token to securely connect PPC TNT to your external tools. Once connected, clicking Sync Now on the dashboard triggers a data pull from all active integrations, aggregating the results into monthly rows on your dashboard.

📋
CRM
Call counts, job revenue, closed customers
📣
Ad Platform
Daily ad spend across Google, Meta, Rumble
📞
Call Tracking
Inbound calls from CallRail or built-in DNI tracking
🛍
Ecommerce
Shopify orders and revenue
🧩
Workflow & AI
AI connector, your own AI key

Minimum for a working dashboard: Connect one CRM or revenue source (for call and revenue data) and one ad platform (for spend data). With just these two, you will have all the columns needed to see your P&L and closing rate.

CRM Integrations

Housecall Pro
Completed jobs (mapped to 'Sold'), job revenue, customer records
CRM

Syncs completed jobs and revenue. Best for plumbers, HVAC, electricians, and other field service businesses already using Housecall Pro as their primary job management tool.

Required Fields
API KeyGo to Housecall Pro → Settings → Integrations → API Key. Copy the key shown. If you don't see it, you may need to enable API access under your plan.
ServiceTitan
Completed/invoiced jobs, revenue, customer phone numbers
CRM

Enterprise-grade sync for larger service businesses. Pulls jobs, revenue, and customer data from your ServiceTitan account.

Required Fields
Client IDServiceTitan Developer Portal → My Apps → your app → Client ID.
Client SecretSame location as Client ID. Keep this private — treat it like a password.
App KeyServiceTitan Developer Portal → My Apps → your app → Application Key.
Tenant IDYour ServiceTitan account ID. Visible in the URL when logged in: app.servicetitan.com/tenant/XXXXXXX
Jobber
Completed jobs, invoice revenue
CRM

Syncs jobs and revenue from Jobber. Good for smaller field service businesses that use Jobber for scheduling and invoicing.

Setup
Connect with JobberNo API key needed. Open Integrations → Jobber and click Connect with Jobber, then approve access in your Jobber account. Tokens are encrypted and refreshed automatically, and you can disconnect from PPC TNT or Jobber at any time.
FieldPulse
Jobs, invoice revenue, customer phone numbers and emails
CRM

Field-service CRM covering jobs, customers, invoices and estimates. A FieldPulse job carries no money and no customer of its own — revenue lives on the invoice and contact details live on the customer record — so PPC TNT assembles one complete job from all three resources. Monetary values are read in dollars, exactly as FieldPulse reports them.

Required Fields
API KeyFieldPulse has no OAuth flow — it issues a single static API key on request to paying customers. Contact FieldPulse support and ask for API access, then paste the key here. Treat it like a password: it grants access to your whole FieldPulse account, and there is nothing to refresh or rotate automatically.
Webhook URL (optional)Copy the read-only webhook URL from the FieldPulse card in Vendors into FieldPulse to receive job and invoice updates in near real time, instead of waiting for the next scheduled sync.
QuickBooks
Paid invoice amounts, customer records
CRM

Pulls paid invoices directly from QuickBooks Online. Useful if your field service software doesn't have a direct integration but you invoice through QuickBooks.

Setup
Connect with QuickBooksOne click. Sign in to Intuit, approve access, and you land back in PPC TNT connected — there is no Intuit developer app to register and nothing to paste. Access tokens are short-lived, so a fresh one is minted from your refresh token on every sync.
Advanced: your own Intuit app
Client IDAdvanced only — most accounts should use Connect with QuickBooks, which fills all four of these in automatically. Intuit Developer Portal → My Apps → your app → Keys and credentials → Production keys → Client ID.
Client SecretSame page as Client ID. Copy the Client Secret. Keep it private.
Refresh TokenUse the Intuit OAuth 2.0 Playground at developer.intuit.com to generate a refresh token for your QuickBooks company.
Company ID (Realm ID)Your QuickBooks Company ID, visible in the URL when logged in: qbo.intuit.com/app/homepage?realmId=XXXXXXXXX
Stripe
Successful payment amounts, customer phone numbers
CRM

Syncs payments and customer phone numbers from Stripe. Ideal if you process payments through Stripe directly (common for service businesses with card-on-file setups).

Required Fields
Secret KeyStripe Dashboard → Developers → API keys → copy the Secret key (starts with sk_live_). Never share this publicly — it has full account access.
HubSpot
Closed-won deal values, contact phone numbers
CRM

Syncs closed-won deals and contact phone numbers. Best for businesses that use HubSpot as a CRM for tracking leads through a sales pipeline.

Required Fields
Private App TokenHubSpot → Settings → Integrations → Private Apps → Create a private app. Enable scopes: crm.objects.deals.read and crm.objects.contacts.read. Copy the access token shown after creation.
GoHighLevel
Won opportunities, contact phone numbers
CRM

Syncs won opportunities and contact phone numbers from GoHighLevel. Common for agencies managing client accounts inside GoHighLevel sub-locations.

Required Fields
API KeyGoHighLevel → Settings → Integrations → API Key. Important: make sure you are inside the sub-account location, not the agency level, when copying this key.
Location IDGoHighLevel → Settings → Business Profile. The Location ID is at the bottom of the page, or visible in the URL as ?location=XXXXXXXXX
Zoho CRM
Closed-won deals, contact phone numbers
CRM

Syncs closed-won deals and contact phone numbers via OAuth, across any Zoho data center. Any deal stage whose name contains “won” counts as revenue, so your custom pipeline names still work.

Required Fields
Client ID & SecretZoho API Console (api-console.zoho.com) → Self Client (or Server-based app) → copy the Client ID and Client Secret.
Refresh TokenGenerate a Self Client grant token with scope ZohoCRM.modules.READ, then exchange it for a refresh token. The refresh token does not expire; PPC TNT mints a fresh access token on every sync.
Data CenterPick your Zoho region (US / EU / IN / AU / etc.) so PPC TNT calls the correct accounts + API host pair.

Ad Platform Integrations

Google Ads
Daily spend by account
Ad Platform

Pulls daily ad spend automatically via the Google Ads API. This is the most important integration for local service businesses — without it, the spend column of your dashboard will be empty and P&L cannot be calculated.

Required Fields
OAuth Client IDGoogle Cloud Console → APIs & Services → Credentials → Create OAuth 2.0 Client ID. Copy the Client ID.
OAuth Client SecretSame page as Client ID — copy the Client Secret.
Refresh TokenUse the OAuth Playground at developers.google.com/oauthplayground. Select the scope https://www.googleapis.com/auth/adwords and complete the OAuth flow to get a refresh token.
Developer TokenGoogle Ads → Tools → API Center. Your developer token is shown there. Requires applying for API access in your Google Ads account.
Customer IDYour 10-digit Google Ads account ID shown in the top-right of the Google Ads interface (e.g. 123-456-7890). Enter without dashes.
Meta Ads
Daily spend by ad account
Ad Platform

Pulls daily Facebook and Instagram ad spend. Connect this if you run Meta campaigns alongside Google Ads so all your spend is tracked in one place.

Required Fields
Access TokenMeta Business Suite → Settings → Business Settings → System Users → Add System User → Generate Token. Select ads_read permission.
Ad Account IDMeta Ads Manager → account dropdown top-left. Your account ID is the number shown. Enter without the 'act_' prefix.
Rumble Ads
Daily spend
Ad Platform

Pulls daily Rumble advertising spend. Connect this if you run video or display campaigns on the Rumble platform.

Required Fields
API KeyRumble Ads → your profile → API Tokens (ads.rumble.com/account/api/tokens) → Generate a new token. Copy it immediately — it only displays once.

Call Tracking Integrations

CallRail
Inbound call counts, call recordings, caller phone numbers
Call Tracking

Syncs inbound call data so the dashboard can show Total Calls per month. This is the primary source for call volume if your CRM doesn't track raw inbound call counts accurately.

Required Fields
API KeyCallRail → Settings (gear icon) → API Access → Create API Key. Name it anything and copy the key.
Account IDCallRail → Settings → API Access. Your Account ID is shown at the top of that page, or visible in the URL.
Company ID (optional)Agency only — leave blank for a single-client CallRail account. For agencies with multiple clients in one account: CallRail → Settings → Companies → click the company → copy the ID from the URL.
Built-in Call Tracking
DNI numbers, call outcomes, Google Ads conversions
Call Tracking

PPC TNT's own dynamic-number-insertion (DNI) call tracking — an alternative to CallRail that ties inbound calls to the Google click that drove them and pushes qualifying calls to Google Ads as offline conversions. Configured under Vendors → Call Tracking. Full walkthrough in the Call Tracking & Attribution guide.

Setup
Create a poolAdd a tracking pool with your destination number, target numbers, and Google Ads customer + conversion-action IDs, then paste the DNI snippet onto your site.
Pick a call sourceDuration (converts past a minimum call length), Five9 (auto-pulls dispositioned calls from your Five9 contact center), or Manual (CSV upload).
Five9
Agent dispositions, dialled numbers, call duration
Call Tracking

A call source for built-in call tracking rather than a CRM. PPC TNT pulls a Five9 report on a schedule, and the disposition your agents set decides which calls convert. Configured per tracking pool, so different campaigns can qualify on different dispositions. See the Five9 integration page.

Required Fields
Username & PasswordThe Five9 account PPC TNT should use to run reports. Read-only is sufficient.
Report Folder & NamePPC TNT looks under Shared Reports and Standard Reports and tells you which one resolved. Use Verify report columns before going live — it runs the report read-only and shows the real header row, so a renamed column is caught immediately rather than after a week of failed runs.
Qualifying DispositionsThe dispositions that mean “real lead”. Required — a Five9 call converts on disposition or not at all, with no fallback to a duration rule, so a pool with an empty list uploads nothing. This fails closed on purpose: a wrong conversion trains Smart Bidding and can't be cleanly withdrawn.

Workflow & AI Integrations

AI Connector
Read: accounts, performance, setup gaps, activity
Workflow

Add PPC TNT to Claude, ChatGPT or any MCP client as a custom connector and ask about every client account at once. Sixteen tools, scoped to exactly the accounts you can already see. Setup is one URL — no client id, no secret. Full walkthrough in the AI Connector guide.

Setup
Remote MCP server URLIn Claude, ChatGPT or your editor's MCP settings, add a remote MCP server and paste https://betterads-production.up.railway.app/mcp and leave the OAuth fields blank.
Approve the scopesread for every reporting tool, and optionally comment:tasks to let your AI comment on your task board. Uncheck the second for a strictly read-only connector.
Your own AI provider
Runs every AI feature on your key
AI

Optional. PPC TNT's AI features run on our platform AI by default; connect your own key on the AI vendor card and every AI feature will run on that instead. Your Business Profile is passed as context either way, so switching models changes which model reads your account — not what it knows about it.

Required Fields
ProviderPick one of the eight below. Whichever you choose runs every AI feature — the ad agents, insights, the spend optimizer, negative keywords, research, onboarding and Bulk Pages copy.
API KeyFrom your chosen provider's console. Stored encrypted at rest like every other credential, and used server-side only.
Model (optional)Leave blank for the provider's default. Set it to pin a specific model, adopt a newer one before we update the default, or — for OpenRouter — choose which model the gateway routes to.
Providers you can connect
ProviderText AIAd agentsImage inputAd creativeDefault model
Anthropic (Claude)Claude default
OpenAI (ChatGPT)gpt-5
xAI (Grok)grok-4
Google (Gemini)gemini-2.5-pro
Mistral AImistral-large-latest
DeepSeekdeepseek-chat
Groqllama-3.3-70b-versatile
OpenRouteryour chosen slug

Ad creative — generating new ad images in the Meta Ads Agent — is the only capability that isn't universal, because not every vendor exposes an image API. Everything else works on every provider. Full comparison on the AI Insights page.

Ecommerce Integrations

Shopify
Order counts, gross revenue, order dates
Ecommerce

Syncs orders and revenue from your Shopify store. Enables Ecommerce Mode on the dashboard — showing Orders, Revenue, Ad Spend, P&L, and ROAS instead of the service business call funnel.

Required Fields
Shop DomainYour Shopify store URL in the format mystore.myshopify.com — do not include https://
Admin API Access TokenShopify Partners Dashboard: partners.shopify.com/dev-dashboard → your app → Configuration → enable read_orders scope → Save. Then Test → Select store → Install. Copy the access token immediately.

Security: how credentials are stored

All API keys and tokens are encrypted at rest before being stored. They are never displayed in plain text after you save them. The input fields use password masking so they are not visible on screen.

Google Ads API note: The Google Ads API requires applying for access at Google Ads → Tools → API Center before a developer token is issued. Basic access (sufficient for PPC TNT) is typically approved within 1–2 business days. You also need to enable the Google Ads API in your Google Cloud Console project.

Troubleshooting connections

ProblemFix
Sync shows no data after connectingRe-enter the credentials — a common cause is copying an extra space before or after the key. Save again and re-sync.
Google Ads shows zero spendVerify the Customer ID has no dashes. Confirm the Developer Token is approved (not pending). Check the refresh token hasn't expired by regenerating it.
Housecall Pro / Jobber shows no jobsMake sure jobs are marked as 'Completed' in the CRM — in-progress or cancelled jobs are not included.
Shopify sync shows no ordersConfirm the Admin API Access Token has the read_orders scope. Re-install the custom app if necessary.
GoHighLevel shows wrong dataMake sure the API Key is from the sub-account (location level), not the agency level. They look similar but pull different data.
CallRail shows zero callsVerify your Account ID is correct (not the Company ID). Check that your CallRail tracking numbers are active and receiving calls.

FAQ

What integrations does PPC TNT support?

Five categories: CRM systems (Housecall Pro, ServiceTitan, Jobber, FieldPulse, Zoho, QuickBooks, Stripe, HubSpot, GoHighLevel, FareHarbor) for call and revenue data; Ad platforms (Google Ads, Meta Ads, Rumble Ads) for spend data; Call tracking (CallRail, or PPC TNT's built-in DNI tracking with Five9 / duration / manual call sources) for inbound call attribution and Google Ads conversion sync; Ecommerce (Shopify) for order and revenue data; and Workflow & AI (the AI connector, and your own key from any supported AI provider).

What's the difference between the Five9 integration and CallRail?

CallRail is a call-tracking vendor — it owns the numbers and reports the calls. Five9 is a call source for PPC TNT's own tracking: PPC TNT hands out the numbers, and Five9 tells it how each call was dispositioned. So Five9 answers "was this a real lead?", while CallRail answers "did a call happen?".

Can I connect Google Ads once for the whole agency?

Yes. Connect Google Ads at the agency (MCC) level under Agency → Integrations, then pick which account each client uses from a dropdown on that client's card — no separate OAuth per workspace. For clients outside your MCC, “Connect a different Google account” still does a per-workspace connection.

Do I need all integrations connected?

No. You need at minimum one CRM or revenue source and one ad platform. The more integrations you connect, the more complete your dashboard data will be.

Where do I find my Housecall Pro API key?

Housecall Pro → Settings → Integrations → API Key. Copy the key shown there.

Where do I find my Google Ads customer ID?

Your Google Ads Customer ID is the 10-digit number in the top-right of your Google Ads account (format: 123-456-7890). Enter it without dashes. You also need an OAuth Client ID and Secret from Google Cloud Console, a Refresh Token from the OAuth Playground, and a Developer Token from Google Ads Tools → API Center.

Is my API key data stored securely?

Yes. All API keys and credentials are encrypted at rest using AES-256 encryption before being stored. They are never displayed in plain text after saving and are only used server-side to pull your data.

Can I connect multiple ad accounts?

Currently one ad account per platform per workspace. If you manage multiple Google Ads accounts, connect the one that contains the campaigns for this workspace. Agency users can create separate workspaces for each client, each with their own integration credentials.