intercom boot() failed app_id undefined
For developers and agents adding Intercom chat. Use when boot fails on an undefined app id. Not for messenger display or ad-blocker issues.
Fix Intercom boot failing with app_id undefined
TL;DR
Intercom boot fails when the app_id is undefined at call time, usually a race with your config load or an env var that never made it to the client. Confirm the value exists before calling boot, and call boot after your config resolves. The snippet is fine; the timing is not.
The error
Intercom boot failed
Error: app_id is undefined. Intercom('boot') requires a valid app_id.Use this skill
Agent? Search Vectle for this error:
curl -s "https://vectle.com/api/v1/search?q=intercom boot() failed app_id undefined"Fix it
Step 1: Log the value right before boot
Add a console log of the app_id variable immediately before the Intercom boot call, then reload.Expected: You see undefined or an empty string, confirming the value never arrived.
Step 2: Trace where the value should come from
Follow it back: env var, config endpoint, or build-time injection. Check each hop.Expected: You find the broken hop: a missing env var, a failed config fetch, or a typo in the key name.
Step 3: Fix the source of the value
Set the env var, fix the config endpoint, or correct the key name, then rebuild or redeploy.Expected: The log now shows the real app id before boot.
Step 4: Gate boot on config readiness
Only call Intercom boot inside the callback or promise that resolves your config.Expected: Boot never fires before the value exists.
Step 5: Verify the messenger appears
Reload and check for the Intercom messenger on the page.Expected: The messenger loads and boot succeeds.
When this applies
- Intercom boot fails with app_id undefined
- The messenger loads in one environment but not another
- You just moved config to async loading
When it doesn't
- Boot succeeds but the messenger never shows (check the boot options)
- The app id is correct and it still fails (check ad blockers)
- You use the new Intercom webhooks instead of the messenger
Compatibility
Intercom JavaScript messenger snippet. Any framework.
Variant phrasings
intercom app_id undefined boot error
Same failure. The value pipeline matters more than the snippet.
intercom boot requires valid app_id
A wrong-but-defined id fails differently. Undefined specifically means the value never arrived.
intercom messenger not loading app id
No messenger with no error often means boot was never called because the config promise never resolved.
Why it happens
The Intercom snippet reads app_id from your code at boot time. Modern apps load config asynchronously, so boot frequently fires before the config promise resolves, or the env var was never injected into the client bundle. The call is correct; it runs too early or with nothing to read.
Edge cases
- Build-time env injection bakes the value in; a missing var at build time means a rebuild after fixing
- Feature flags that gate the messenger can swallow the boot call silently
- Multiple boot calls with different ids fight; boot once per page load
If it still fails
- Send a test to a controlled inbox and read the full headers before changing config.
- Check sender reputation and blocklists in parallel with content fixes.
- Verify authentication with a validator tool instead of guessing at the records.
- Change one variable at a time; changing content and config together hides the cause.
- If delivery fails at one receiver only, their filtering is the suspect, not your setup.
Prevention
- Validate SPF, DKIM, and DMARC with a checker after every DNS change.
- Warm up new sending domains and IPs gradually.
- Monitor bounce and complaint rates weekly.
- Keep suppression lists synced across all sending tools.
- Test to seed inboxes before big campaigns.
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_a6rSD-z0rlHJ8ZxP7M7VWw