Skip to content

External APIs & Integrations

Every third-party / external service the platform talks to — what it provides, which part of the system calls it (Worker handler · n8n · a BigQuery transfer · the build), and the secret that authenticates it. This is the integration map; for the platform’s own internal routes see worker-endpoints.md, and for the n8n jobs themselves n8n-workflows.md. Verified against the code 2026-05-23.

All Worker secrets are set via wrangler secret put (never committed); the n8n-held credentials live in the n8n tenant. Two callers dominate: the Worker (live, at the edge) and n8n (async / ETL / fallback).


ServiceUsed forCalled byAuth
Google BigQuery (bigquery.googleapis.com)The warehouse — almost every read, plus DDL/DMLWorker bq/client.js (all BQ handlers), bq-execute, bq-admin, bq-create-tableBQ_SERVICE_ACCOUNT_JSON → JWT via oauth2.googleapis.com
Google Ads API (googleads.googleapis.com)Live keyword search volumes (county-level)Worker keyword-planner.jsGOOGLE_ADS_DEVELOPER_TOKEN + OAuth (GOOGLE_ADS_CLIENT_ID/_SECRET/_REFRESH_TOKEN/_CUSTOMER_ID/_LOGIN_CUSTOMER_ID)
Google data via BigQuery Data Transfer — GA4, Search Console, GMB, Google Ads, Merchant CenterLands in BQ on a schedule; the Worker only reads itGoogle-side transfer (not a Worker call) → read by Worker ga4-stats, gsc-stats, gbp-stats, ads-stats, gmc-statsGoogle transfer service; see bigquery-and-sync.md

CSO / Pobal / Tailte / CRO / data.gov.ie are data sources loaded into BQ (provenance, not live APIs) — see cso-area-data.html.

ServiceUsed forCalled byAuth
OpenAI (api.openai.com)Embeddings for every Vectorize index + Whisper speech-to-textWorker: vector-*, deals-vector-*, company-knowledge-*, case-studies-reindex, docs-reindex/docs-search, crawl-website, deal-patterns, sttOPENAI_API_KEY
Anthropic Claude (api.anthropic.com)The AI advisor + generated insights + the docs botWorker: ai-advisor, discovery-insights, map-advisor, deal-patterns, docs-searchANTHROPIC_API_KEY
ServiceUsed forCalled byAuth
SerpAPI (serpapi.com)SERP rank grids, local rank checks, prospect search/enrich/audit, GBP live, NAPWorker: serp-grid, serp-local, prospect-search/-enrich/-audit, competitor-enrich, gbp-live, lib/insites-nap · + n8n batch refresh loopsSERPAPI_KEY
Pleper (scrape.pleper.com)GBP profile scrape (photos, posts, hours, categories)Worker lib/pleperprospect-audit, gbp-live, prospect-pleper-refresh, competitor-enrich · + n8n batchPLEPER_API_KEY + PLEPER_API_SIG
Ahrefs (api.ahrefs.com)Keyword volumes + SEO metrics; + usage meter (subscription-info/limits-and-usage)Worker: ahrefs-by-url, ahrefs-seo, prospect-intel, discovery-suggest, saymore-keyword-matrix, api-usage-report-cron (meter)AHREFS_API_KEY
InSites (api.insites.com / app.insites.com)Digital-footprint + LRC audits, share links, report settingsWorker: insites-settings, insites-share-link, insites-report-summary, grid-map-build, ai-advisor · + n8n (submit / poll / callback — the primary path)INSITES_API_KEY_DF, INSITES_API_KEY_LRC, INSITES_PUBLIC_KEY (DF vs LRC are separate keys)
ServiceUsed forCalled byAuth
FCR CRM (Dynamics) (crmprod.fcrmedia.ie)Account + order data (the billing source of truth)Worker check-account, check-enrichment · + n8n dashboard-accountinternal CRM auth
HubSpot (api.hubapi.com)Deals, engagements (notes/emails/calls), properties; daily usage via rate-limit headersWorker: hubspot-deal-context/-live/-deals-search/-engagements-sync/-properties, ai-advisor, api-usage-report-cron (usage headers) · + n8n sync to BQHUBSPOT_ACCESS_TOKEN
Teamwork Projects (fcrie.teamwork.com)Build projects, milestones, tasksWorker teamwork-project, build-detail, ai-advisor (live single-project) · + n8n bulk sync → BQTEAMWORK_PROJECTS_API_KEY
Teamwork Desk (fcrie.teamwork.com/desk)Support tickets (open + closed history)Worker teamwork-desk-ticket(s), twd-deep-dive, build-detail, ai-advisorTEAMWORK_DESK_API_KEY (Bearer) + TEAMWORK_DESK_WEBHOOK_SECRET (HMAC for the deep-dive webhook)
ServiceUsed forCalled byAuth
Meta (Facebook) Marketing API (graph.facebook.com)Audience reach estimates per areaWorker meta-reach, meta-reach-batchMETA_ACCESS_TOKEN + META_AD_ACCOUNT_ID
YextPublisher-listings syncn8n (Worker yext-sync delegates to n8n; yext-listings reads the BQ cache)n8n-held Yext creds
iovoxCall-tracking dataIngested to BQ via n8n/ETL; Worker iovox only reads BQn8n/ETL
Roam (Ro.am) (api.ro.am)Post AM-filed briefs to the Development group; advisor chat surfaceWorker ai-advisor (send_brief_to_development)ROAM_BEARER + ROAM_DEV_GROUP_ID
ServiceUsed forCalled byAuth
n8n (fcrmedia.app.n8n.cloud/webhook)Async jobs, ETL, and Worker fallback — InSites submit/poll, CRM account fetch, HubSpot/Teamwork/Yext/iovox sync, batch SerpAPI+Pleper refreshWorker → n8n (ai-advisor, discovery-df-compare, hubspot-chat, insites-poll, prospect-engagement, report-annotate) and the web UI → n8n directly (dashboard-account, GA4/GSC/GBP stats, etc.)N8N_API_KEY

Cloudflare platform (bindings, not HTTP APIs)

Section titled “Cloudflare platform (bindings, not HTTP APIs)”
BindingServiceUsed for
VECTORIZE / COMPANY_KNOWLEDGE_VECTORIZE / DEAL_VECTORIZE / DOCS_VECTORIZEVectorizeSemantic search (site portfolio, company knowledge, deal history, docs bot)
CACHE / REPORTSWorkers KVResponse cache + Discovery report storage
ADVISOR_CSV / SERP_SNAPSHOTSR2CSV attachments + SERP HTML/PNG snapshots
BROWSERBrowser RenderingHeadless-Chrome screenshots (serp-screenshot)
BRIEF_QUEUE (+ DLQ)QueuesDeal-brief refresh fan-out
PROGRESS_DODurable ObjectsStrongly-consistent advisor progress state for the HubSpot card poller
API_USAGEAnalytics EnginePer-call counter for worker→Teamwork calls (lib/api-usage.js countedFetch); read back by the weekly usage report (see below)

Client-side / CDN (browser, not the server)

Section titled “Client-side / CDN (browser, not the server)”
  • OpenStreetMap tiles + unpkg (Leaflet) — map rendering in the embedded maps (area-map-embed, grid-map-build).
  • Google Maps deep-links (maps.app.goo.gl) — links in case studies / reports (not an API call).

A weekly external-API usage report (api-usage-report-cron.js, on the Mon 08:00 UTC cron + on-demand GET /dashboard-api-usage-report?dry=true) DMs our usage of the paid providers to Ro.am, each read from its best source. Two sourcing strategies: a vendor meter (account-level, captures worker and n8n — true totality) where the provider exposes one, else a worker counter (API_USAGE Analytics Engine via countedFetch, worker-originated only):

  • Ahrefs (vendor meter)/v3/subscription-info/limits-and-usage (free, no units). Weekly run-rate + projection vs the unit cap.
  • SerpAPI (vendor meter)serpapi.com/account: this-month usage vs the plan quota. Account-level, so it covers worker enrich/grid/local + n8n.
  • HubSpot (headers)X-HubSpot-RateLimit-Daily(-Remaining) off one cheap call. The dedicated account-info/v3/api-usage/daily endpoint is API-key only (404s for private-app tokens). Daily counter — today’s headroom, not a weekly sum.
  • Teamwork (worker counter)countedFetch on the Teamwork handler choke points. Worker-originated only — excludes the nightly n8n Desk/Projects sync.
  • Pleper (worker counter) — counts scrape jobs (the submit call, not the commit/poll round-trips) via countedFetch in lib/pleper.js. Worker-originated only — excludes any n8n Pleper calls.

The worker-counter providers (Teamwork, Pleper) need AE_READ_TOKEN (a Cloudflare API token, scope Account Analytics: Read) + the CF_ACCOUNT_ID var to read the dataset back; the vendor-meter providers work without it.


Source of truth: external hosts + env.* secrets in worker/src/**. If you add an integration, add its secret via wrangler secret put, wire CORS if a browser calls it, and add a row here.

Ask the docsRAG over this site
Ask anything about the FCR Dashboard platform — architecture, BigQuery, the worker routes, billing rules, the LRC stack, scoring… Answers are grounded in this documentation, with source links.
How does the deal-brief refresh work? Which routes are Worker vs n8n? How is account health scored?