✗ AuthenticationError: Error code: 401 - {'type': 'error', 'error': {'type': 'authentication_error', 'message': 'invalid x-api-key'}, 'request_id': 'req_011CgmgoNm2ptRQqwoPXWb7p'}
Health check
One button, five minutes to know the whole machine is wired.
| 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 02:47:31 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_011CgmYP43YqT1zbEJy8Xm2Z'} |
| 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 |
🎯 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.
| Name | 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.
| Key | Value | |
|---|---|---|
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 |
…Rg== | Reveal |
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