Health check

One button, five minutes to know the whole machine is wired.

▶ Test all connections
Gemini ● connected
Apify ● connected
Outscraper ● connected
Meta Ad Library token ● token rejected by Meta: The token has expired on Wednesday, 14-Oct-26 12:03:20 PDT. The current time is Friday, 06-Nov-26 04:37:55 PST.
Hunter.io ● connected
MillionVerifier ● connected
Instantly.ai ● connected
GoHighLevel ● connected - can read location jrVZS1fbKPc4XhDzVzyv
GHL Agency API (Master Snapshot auto-provisioning) ● optional - not set, onboarding stays manual
Claude (Anthropic) ● AuthenticationError: Error code: 401 - {'type': 'error', 'error': {'type': 'authentication_error', 'message': 'invalid x-api-key'}, 'request_id': 'req_011CgmgoNwghG6eFQ7ZQuwpR'}
Google Ads ● connected - 2 account(s) reachable
GA4 ● service account authenticates - remember to grant ga4-reader@vinewood-lead-bot.iam.gserviceaccount.com Viewer on the GA4 property

▾ AI search (GEO/AEO)

▾ Search Console (traffic proof)

▾ Content autopilot

▾ Scraping & data

▾ Email finding

▾ Sending

▾ AI brain (Claude + Gemini)

Test Claude connection AuthenticationError: Error code: 401 - {'type': 'error', 'error': {'type': 'authentication_error', 'message': 'invalid x-api-key'}, 'request_id': 'req_011CgmgoNm2ptRQqwoPXWb7p'}

▾ Google Ads

Apply for the developer token TODAY — approval is the longest lead time (days–weeks). Test-account access is instant. ads.google.com → your MCC → Tools → API Center.

Authorize Google Runs the OAuth consent flow and stores the refresh token above.
Test Google Ads connection Connected - 2 Google Ads account(s) reachable by this credential.

▾ GA4

Takes about 10 minutes, no code:
1. Google Cloud Console → APIs & Services → Library → enable the "Google Analytics Data API".
2. Same project → IAM & Admin → Service Accounts → Create Service Account → Keys → Add Key → JSON. This downloads a .json file.
3. In Google Analytics itself → Admin → Property Access Management → add the service account's email (the "client_email" field inside the JSON you downloaded) as a Viewer on each client's GA4 property.
4. Paste the ENTIRE downloaded JSON file's contents into the field above.
This one service account can read every client property you've given it Viewer access to — you don't need a separate one per client.

▾ GoHighLevel

Inbound webhook URL — paste this into the GHL Workflow's Webhook action:
http://100.98.145.103:5050/webhooks/ghl

Add your GHL_WEBHOOK_SECRET above as the X-Webhook-Secret header (or ?secret=…) on that same action, or the endpoint refuses the request.

🔗 Bulk-connect sub-accounts from clients.json — ingest a delivery-wing handoff file to wire multiple clients at once.

▾ Website inbound intake

▾ Agency identity

▾ Automation

stored as 24-hour HH:MM

▾ The Staff — autonomy levels

▾ Dial Mode

▾ Sales HQ — Money Scoreboard

▾ Money (Stripe) — Part 5 Command HQ

▾ One-Click Report — Email + SMS

▾ Calling (Signal House Voice)

Call recording defaults OFF everywhere in this app — Florida is a two-party-consent state. Nothing here records unless a rep explicitly turns it on for one specific call, and the softphone shows that disclosure before dialing.

📞 Set up forward-to-cell Uses the SignalHouse API key + FROM + Forward-to-cell number above. Signal House API key, FROM number, and cell number are all required.

▾ Home Care (Licensing OS)

Pulls licensed Florida home-care agencies from the Licensing OS (read-only). Hand-edited lead fields are never overwritten by a sync. The nightly sync is controlled by the toggle above.

Test Licensing OS Add the Licensing OS URL and API key in Settings first.
Run sync now Add the Licensing OS URL and API key in Settings first.

🎯 Pain Board analogies — v4.4 Part 5 'Analogy Engine'. What a rep actually says on the call to make a real audit finding click for an owner.

you're paying for ads you can't measure
competitors show up ahead of you and look more trusted
a form fill comes in but nothing books it in right away — it can slip through
the phone just isn't ringing enough
people find you but there's no easy way for them to actually reach you

🧰 Service catalog & packages — v4.4 Part 5 'Package Builder'. The name, price band, and blurb behind each door (ads/web/automation/reputation) that gets proposed once a matching pain is confirmed.

Ads
Automation
Reputation
Web

👥 Reps — v4.7 §6. Who's dialing, for attribution on calls/pains/bookings. Not a login — anyone can pick any rep from the sidebar, no password.

NameEmail Calls (30d)Status
MARGAUX PUGH info@vinewoodagency.com 0 active

🔐 Export credentials — every key on this machine, and the vault key, as one encrypted backup.

KeyValue
GSC_REFRESH_TOKEN
Search Console refresh token (webmasters.readonly scope)
…UIIY Reveal
GSC_OAUTH_CLIENT_SECRET
GSC OAuth Client Secret (blank = reuse Google Ads secret)
…O9v9 Reveal
GEMINI_API_KEY
Gemini (Google AI Studio)
…CvLw Reveal
OUTSCRAPER_API_KEY
Outscraper
…Y1Nw Reveal
APIFY_API_KEY
Apify
…mQDE Reveal
META_AD_LIBRARY_TOKEN
Meta Ad Library token
…SzjI Reveal
PAGESPEED_API_KEY
Google PageSpeed key
…hCPk Reveal
GOOGLE_PLACES_API_KEY
Google Places API key (Google Cloud Console)
…5A0M Reveal
HUNTER_API_KEY
Hunter.io key
…b6fe Reveal
MILLIONVERIFIER_API_KEY
MillionVerifier key
…zDbR Reveal
INSTANTLY_API_KEY
Instantly.ai key
NmI1ZGJkMDctNDQ0ZS00YmExLWFjOTUtNDNmOWYwYmFmNTNmOmpmemt0amZXVXBaRg== Hide
ANTHROPIC_API_KEY
Anthropic API key (Claude) — the on-demand strategist/writer
…awAA Reveal
GADS_DEV_TOKEN
Developer token (Google Ads → your MCC → Tools → API Center)
…oAkQ Reveal
GADS_OAUTH_CLIENT_ID
OAuth Client ID (Google Cloud Console → Credentials, Desktop app)
….com Reveal
GADS_OAUTH_CLIENT_SECRET
OAuth Client Secret
…od2Z Reveal
GADS_REFRESH_TOKEN
Refresh token (captured by [Authorize Google] below)
…Adn8 Reveal
GA4_SERVICE_ACCOUNT_JSON
Default service-account JSON (per-client property IDs live on client records)
…m" } Reveal
GHL_TOKEN
Private Integration token
…8e95 Reveal
GHL_WEBHOOK_SECRET
Shared secret for the /webhooks/ghl Review Engine trigger (set the same value in the GHL Workflow's webhook header/query param)
…gYwA Reveal
GHL_AGENCY_TOKEN
Agency (Company)-level API token — needs locations.write scope. Requires the Agency Pro ($497) plan. Blank = auto-provisioning is skipped and onboarding stays manual, same as before.
● not set
WEBSITE_INTAKE_SECRET
Shared secret for the /intake/website inbound-lead endpoint (set the same value in the GHL Workflow forwarding Base44 form submissions)
…gZyE Reveal
STRIPE_API_KEY
Stripe Secret API key (sk_live_... or sk_test_...) — powers Payment Links, invoices, and deposit collection
…91Us Reveal
STRIPE_WEBHOOK_SECRET
Stripe webhook signing secret (whsec_...) — lets the app know a payment actually cleared, instead of guessing
…QW5B Reveal
SMTP_PASS
SMTP password / app password
…or29 Reveal
SIGNALHOUSE_API_KEY
Signal House API Key
…jbBU Reveal
LICENSING_OS_API_KEY
Licensing OS API key (read-only Bearer key)
● not set
hc_webhook_secret
Licensing OS webhook signing secret (blank = reuse the API key)
● not set
VINEWOOD_VAULT_KEY (environment)
Fernet vault key — decrypts every client credential (from the environment)
…02A= Reveal

⚠ This backup contains every API key and the Fernet vault key that decrypts all client credentials. Anyone who opens it with the passphrase can use all of them. It is encrypted with the passphrase you set below — save that passphrase separately; it's the only way to open the file.

Gemini: aistudio.google.com · Outscraper: app.outscraper.com · Apify: console.apify.com · Instantly: app.instantly.ai · Hunter: hunter.io · PageSpeed: get a key · Anthropic: console.anthropic.com · Google Ads API: ads.google.com
🤖