Fixes & Errors

Troubleshooting

Solutions to the most common contactID extension, form-fill, session, AI, and billing issues, updated for the September 2026 redesign.

This is the most common troubleshooting request. Work through the checks below in order; the cause is almost always one of these.

  1. Is the extension actually running? Check that the contactID icon in your Chrome toolbar isn’t greyed out. If it is, reload the extension at chrome://extensions/.
  2. Are you signed in? Your account email should be visible at the top of the side panel. If you see a sign-in prompt instead, sign in.
  3. Do you have website credits? A balance of 0 blocks sending. Check the balance in the side panel or dashboard and top up if needed.
  4. Is an agent selected? Check the “Sending as” list at the top of the side panel. If nothing is selected, choose an agent.
  5. Did you actually click Start? The Start button becomes Pause once a batch is running. If you still see Start, the click didn’t register; try again.
  6. Is Chrome minimized or in memory-saver mode? Bring the Chrome window to the foreground, and check chrome://flags/#memory-saver-mode; a minimized or memory-saved browser can pause background activity.
  7. Does the target page actually load? Manually open one URL from your queue in a new tab and confirm it loads and has a real contact form. contactID can’t fill a page that doesn’t load or has no form.
  8. Reload the extension. As a general fix, go to chrome://extensions/, find contactID, and click Reload.
If you’re still stuck after these steps, contact support with your account email, your extension and Chrome versions (from chrome://extensions/ and Chrome’s About page), a screenshot of the side panel, and one specific failing URL.

Partial fills are usually caused by an unusual form layout rather than a bug. The most common culprits are:

  • File upload fields (contactID doesn’t upload files).
  • Multi-step or wizard-style forms.
  • Custom JavaScript select widgets instead of a native dropdown.
  • Custom date pickers.
  • Address autocomplete fields that need typing to trigger.
  • Conditional fields that only appear after another field is filled.
  • Forms that load dynamically; contactID waits about 5 seconds for content to appear, and forms that load slower than that can be missed.
  • Forms sitting inside an iframe, or hidden behind a “Show form” click.

An optional field that isn’t detected is simply skipped and the send continues. A required field that isn’t detected fails the send, and the specific reason is shown on that entry in Activity.

If a site should clearly work but doesn’t, send the URL and field name to [email protected]. Detection improvements ship every 2 to 4 weeks.

contactID never attempts to bypass bot protection, including Cloudflare Turnstile, hCaptcha, reCAPTCHA v2 or v3, and FriendlyCaptcha. This is deliberate for two reasons: it respects a site’s stated preference not to receive automated submissions, and bypassing this kind of protection risks getting your IP address banned.

When a site is protected in this way, the entry is marked Failed, no credit is used, and it is not retried automatically.

Before importing a list, filter out categories that are almost always bot-protected, such as government, banking, healthcare, major SaaS platforms, and large e-commerce sites. For those, use email or LinkedIn as an alternate outreach channel instead.

This error is rare and transient. It appears when there’s a momentary hiccup in Stripe or in a wallet-balance lookup, not because anything is actually wrong with your account.

Nothing is ever charged when this error appears. contactID’s payment logic fails closed, so any uncertainty results in an error rather than a partial or incorrect charge.

Wait 30 seconds to 2 minutes and try again; it almost always resolves on retry. If a batch was mid-run when the error appeared, it simply pauses and resumes automatically once the retry succeeds, with no credit lost.

“Session expired, please sign in again” is normal and expected in a few situations:

  • 30 days of inactivity, since contactID uses a sliding 30-day session window.
  • A password or email change on any device.
  • Signing out everywhere from another device.

Just sign in again. Everything on your account, including agents, credits, and activity history, is preserved. If a batch was in progress on the same device, it resumes once you’re signed back in.

If you notice the extension opening the same site over and over in a loop, pause the batch immediately from the side panel.

The usual causes are:

  • A momentary wallet-lookup glitch.
  • Corrupted local extension storage.
  • AI Personalization failing repeatedly on the same send.
  • The same website queued twice.

After pausing, reload the extension at chrome://extensions/ and confirm you’re on the latest version. As a last resort, remove and reinstall the extension. Your dashboard data, including agents, credits, and history, is always preserved; only the local queue on that device is cleared.

If sent messages look identical to your base pitch, work through this checklist:

  • Confirm the AI toggle is actually on for that specific agent.
  • Check your AI wallet balance. At $0, personalization silently falls back to your literal pitch by default.
  • Open the send in Activity and check the “Message Sent” field and the AI-cost column; if the AI cost is $0, the AI call didn’t run for that send.
  • Look for a fallback tag on the entry: “AI wallet empty”, “AI service timeout”, or “AI content rejected”.
  • Use the Prompt Tester or AI sample feature to preview output before running a large batch.

If you’re using placeholder mode, double-check the exact spelling of your placeholder and confirm a matching custom prompt actually exists; a mismatched placeholder won’t fire.

Before assuming a job is stuck, check the size of the import:

  • Small imports finish in seconds.
  • 5,000 to 50,000 URLs can reasonably take 2 to 10 minutes.
  • 50,000+ URLs can take 20 or more minutes.

None of the above means anything is wrong. A genuinely stuck job is usually caused by file encoding issues (save your CSV as UTF-8), malformed headers, or an extremely large file. If it doesn’t resolve on its own, cancel the job and re-import a smaller, cleaner file.

This is usually a timing gap: your bank authorizes the charge before Stripe finishes confirming it back to contactID, so the two sides briefly disagree.

  1. Check the payment’s status in Payment History first.
  2. If it’s genuinely missing, wait 5 to 7 business days; authorization holds typically release on their own within that window.
  3. If the charge is still there and unreflected in your account after that, contact support with the Stripe reference ID, the amount, and the date.

contactID never skips a URL silently. Every URL lands in one clear place:

  • No form. Shown with a plain-language reason, plus Retry, Open, and Add URL actions.
  • Contacted before. Surfaced in the pre-flight report before you send, where you choose to Skip or Keep.
  • Over your plan’s per-import limit. Trimmed with a notice; import the remainder in a separate batch.
  • “Only N will send.” Your remaining credits cover fewer URLs than you queued; the rest simply wait.
  • Duplicate within the same list. Queued once automatically.

Work through these checks in order:

  1. Confirm dashboard sign-in works at app.brandid.app with the same credentials.
  2. Reload the extension at chrome://extensions/.
  3. Reset extension data to clear corrupted local storage; this doesn’t touch your account or dashboard data.
  4. If you originally signed up with Google, you must sign in with Google in the extension too, not email and password.
  5. Try an incognito window or a different Chromium-based browser to rule out a profile or extension conflict.

Start with the same prerequisites as “The extension isn’t filling forms”: signed in, URLs actually queued, an agent selected, and credits above zero. Beyond that, check for:

  • A previous run still sitting Paused; Resume or Stop it before starting a new one.
  • The active agent missing a required field, such as name, email, or message.
  • An import still checking; wait for it to reach Queued status.
  • The 60-per-minute rate window; if you just ran a batch, wait about 60 seconds and try again.
New in the September 2026 redesign.

Before filling a form, contactID automatically dismisses cookie and consent banners by accepting them, never declining. This works even when the dialog lives inside a consent manager’s own frame, including TrustArc, OneTrust, Cookiebot, Sourcepoint, and Didomi. Other frames on the page, such as chat widgets or ad units, are left alone.

If a dialog still blocks a form, use Open on that website’s card, accept the dialog yourself once, and click Retry. Most sites remember the choice afterward, so the retry goes through cleanly.

New in the September 2026 redesign.
  • A required group of checkboxes automatically ticks Other when it exists, otherwise a general-information option, otherwise the first choice.
  • A Job Function or Job Title dropdown picks the option closest to the sender’s actual title: a founder or CEO gets C-Level or Executive, a marketer gets Marketing.
  • Country and state dropdowns follow the sender’s address.
  • Fields recognized by type, such as Business Email, are always filled correctly rather than mixed up with fields like company name.
New in the September 2026 redesign: send confirmation is stricter now.

A submission only counts as Sent when something genuinely changes after the click, either a confirmation message that wasn’t there before, or a navigation to a confirmation page.

Marketing text that was already sitting on the page before you submitted, such as “Thanks for visiting,” never counts as confirmation on its own. Any error that appears after submission marks the attempt Failed, and no credit is used.

New in the September 2026 redesign.

A Failed card gives you two options:

  • Retry. Tries the exact same URL again.
  • Replace URL. Lets you paste a better address, such as the site’s actual contact page, instead.

Either way, the category, your custom message, and any merge fields carry over, and the attempt count is preserved. Retry all failed applies the same Retry action to every failed website in your current filter at once.

Still stuck? We’re happy to help.

Install the extension, sign up, or reach out to support directly.

Back to Help Center