Install

Install on any platform.

Wix, Squarespace, Webflow, Ghost, Google Tag Manager, or a custom-coded site — it's the same one-line snippet. Only where you paste it changes.

First

Get your snippet

Every platform below pastes the same tag. Replace chat_YOURKEY with your own widget key — everything else is already correct.

<script async src="https://api.orcalinq.com/w.js"
        data-tenant="chat_YOURKEY"
        data-api="https://api.orcalinq.com"></script>

Your key is shown in Domains → Installation in your dashboard, where the snippet also comes pre-filled. It goes just before </head>, loads on every page, and is tiny (~2.5 KB) — the full chat only loads when a visitor clicks. On WordPress, Shopify, or Cloudflare? Use the dedicated guides instead.

The bit everyone gets stuck on

Where exactly is <head>?

Short answer: it is the first part of the page's code, and on a hosted platform you never see it — you paste into a box and the platform puts it there for you.

If you can see your site's code

Every web page starts with a block that the visitor never sees: it opens with <head> and closes with </head>, and the visible page begins after that. Our tag goes on the line just above the closing </head>.

To see it on your own site: open the site, press Ctrl+U (Windows) or Option+Cmd+U (Mac) to show the page source, then Ctrl+F / Cmd+F and search for </head>. That is the spot. In your editor, whatever file contains that line is the file to change — it is usually named something like header, layout, or base, because it wraps every page.

If you only have a settings screen

Hosted platforms do not show you the file. They give you a text box and insert its contents into the head for you. The box has a different name on each one — these are all the same thing:

  • Header or Site Header — Squarespace, Ghost, most WordPress header plugins
  • Head Code — Webflow
  • Place Code in: Head — Wix
  • Custom HTML tag on an all-pages trigger — Google Tag Manager, Cloudflare Zaraz

Paste the whole snippet into that box and save. You do not need to add <head> tags around it — the platform handles that.

Only a footer box available? Use it. Our tag is loaded asynchronously, so it works at the end of the page too — the bubble just appears a moment later. Head is better where you have the choice, and every platform section below uses it.

Check you actually hit the head

View your page source again and search for data-tenant. If the match appears above </head>, you are done. If it appears near the bottom, it landed in the footer — harmless, keep it. If it does not appear at all, the platform never published your change: re-save, and if the platform has a publish step, publish.

Blocked

What if the platform will not let you edit <head>?

Work down this list. One of the first three almost always applies, and none of them needs a developer.

1. Check whether it is a plan limit, not a missing feature

The menu is often simply switched off on the cheapest tier, and reappears when you upgrade — Wix needs a Premium plan with a connected domain, Squarespace needs Business or higher, Webflow needs a paid Site Plan. If the menu is missing on your platform, look up its own pricing page before concluding it cannot be done.

2. If your site is behind Cloudflare, skip the site entirely

Two options, both from the Cloudflare dashboard, neither touching your website. Your domain must be proxied through Cloudflare — the cloud icon next to the DNS record is orange, not grey.

  • Zaraz — add the chat the same way you would add Google Analytics. Cloudflare dashboard → your domain → ZarazTools configurationThird-party toolsAdd new tool → choose Custom HTML (listed under Other) → paste the snippet → leave the trigger on Pageview → Save. Live worldwide in about a minute.
    One thing to expect: Zaraz runs the tag in the browser, so it will not show up in View page source afterwards — only in the live page when you use Inspect. Free up to a monthly event allowance.
  • Snippets — inserts the tag into the delivered HTML at the edge, so it does appear in View page source. Full steps.

3. If anyone at your company owns Google Tag Manager

Then the head is already reachable, whatever the site runs on: a Custom HTML tag on the All Pages trigger does it. The exact steps are in the Google Tag Manager section further down this page.

4. If someone else built and hosts the site

Send them the snippet and one sentence: paste this before </head> on every page. It is one line, it loads asynchronously so it cannot slow the site's own content, and there is nothing confidential in it — the key inside only permits the chat to start on web addresses you have registered with us.

5. If none of the above is possible

Then be told plainly: the website chat needs a script tag on the page, and if there is no way to add one, there is no way to run it on that site. The honest alternative is to skip the website widget and take enquiries on a messaging channel instead — those run on your own WhatsApp or Telegram account and need nothing from your website at all.

If that did not work

  • Saved, but no bubble. Check in a private window — a normal reload often serves you a cached copy of the page.
  • Works for you, not for a colleague. Almost always caching or a content blocker in their browser, not your install.
  • Appears in the editor preview only, or not at all in the preview. Custom code usually does not run inside a platform's own editor preview. Always test the published site.
  • Nothing above fits. Run Domains → Installation → Diagnose in your dashboard. It fetches your live page from our side and names the cause.
Platform

Custom HTML / Next.js / Astro / Django / Rails / Laravel

Paste before in your global layout.

  1. Open the layout file that wraps every page — Next.js: app/layout.tsx (<head>); Astro: src/layouts/*.astro (<head>); Django: base.html; Rails: app/views/layouts/application.html.erb; Laravel: resources/views/layouts/app.blade.php.
  2. Paste the snippet inside <head>, just before </head>.
  3. Commit and deploy to production.

✓ Check it: Open your production site in a private window — the bubble appears within ~2s. If not, check the console for CSP errors and allow the widget host in your script-src.

Platform

Wix

Settings → Custom Code (needs a Premium plan + connected domain).

  1. Wix dashboard → your site → Settings.
  2. Advanced → Custom Code (may sit under 'Marketing & SEO').
  3. Click + Add Custom Code and paste the snippet.
  4. Name it 'AI Chat Widget'. Add Code to Pages: All pages, load once. Place Code in: Head.
  5. Click Apply.

✓ Check it: Open your published site (not the Wix Editor preview) in a private window — Custom Code never runs in the editor preview.

Heads up: Custom Code is Premium-only and needs a connected domain. Free wixsite.com sites can't use it — upgrade or connect a custom domain first.

Platform

Squarespace

Settings → Advanced → Code Injection (Business plan or higher).

  1. Squarespace dashboard → your site → Settings.
  2. Website → Advanced → Code Injection.
  3. Paste the snippet into the Header box (not Footer).
  4. Click Save. Squarespace re-renders immediately.

✓ Check it: Open your live site in a private window. If it doesn't appear, wait ~30s and hard-refresh — Squarespace may be caching the old HTML.

Heads up: Code Injection needs a Business or Commerce plan. Personal-plan sites don't have the menu — upgrade, or move to a host that allows custom <head> code.

Platform

Webflow

Site Settings → Custom Code → Head Code, then Publish.

  1. Webflow Designer → Site Settings (or dashboard → ⋯ on the project → Settings).
  2. Custom Code in the left nav.
  3. Paste the snippet into the Head Code box.
  4. Save Changes.
  5. Publish → tick your production domain (not just yourname.webflow.io) → Publish to Selected Domains.

✓ Check it: Open your published site in a private window. On the free plan, Head Code only renders on a custom domain — publish there to see it.

Heads up: Site-level Custom Code requires a paid Site Plan (Basic+). The free workspace strips Head Code from webflow.io pages.

Platform

Ghost

Settings → Advanced → Code Injection → Site Header.

  1. Ghost Admin → gear icon → Settings.
  2. Advanced → Code injection.
  3. Paste the snippet into the Site Header box.
  4. Click Save. It loads on every public page.

✓ Check it: Open your Ghost site in a private window — Code Injection bypasses the theme, so there's no theme republish or build cache to clear.

Platform

Google Tag Manager

Custom HTML tag on the All Pages trigger.

  1. tagmanager.google.com → open the container that fires on your site (ID like GTM-XXXXXXX).
  2. Tags → New → Tag Configuration → Custom HTML.
  3. Paste the full <script> snippet — leave 'Support document.write' OFF.
  4. Triggering → All Pages.
  5. Name it 'AI Chat Widget' → Save → Submit → Publish.

✓ Check it: Open your site in a private window. If it doesn't appear, use GTM Preview to confirm the tag fired on the pageview. CSP-strict sites must allow the widget host in script-src.

Stuck on install?

Open Domains → Installation → Diagnose in your dashboard — it fetches your live page and tells you exactly what's wrong.