Guide

How to install the website agent

October 16, 2026

The website agent is a chat button on your site. It answers from your brief, offers times from a meeting type you choose, and adds every visitor who leaves an email to your pipeline. Installing it is one line of HTML, copied from Setup and pasted once into your site template. This guide covers what to finish first, where the line goes, how to confirm the button is live, and what to check when it does not appear.

What you are installing

The snippet is a single script tag. It loads chat.js from Pipeline Simple, passes your workspace key, and draws a Chat button at the bottom right of the page. On a phone the chat opens full screen. On a larger screen it opens as a panel above the button.

The script does not change your pages. It waits until the page has loaded, asks Pipeline Simple whether this site is allowed to show the chat, and draws the button only when the answer is yes. A key pasted on someone else's domain draws nothing.

The button is the website agent. It is separate from the tracking snippet some workspaces use for visit attribution. That other script is ps.js. This guide is only about chat.js.

Visitors talk to the chat. The chat answers from the brief in your workspace and from answers your team has approved. When those do not cover a question, it says the team will follow up. A visitor who leaves an email becomes a lead in Pipeline. If you have connected a meeting type, they can pick a time in the chat and the invite goes out like any other booking.

Before you paste anything

Sign in at the login page with your work email and open the workspace for the site you are editing. If you belong to more than one company, the name at the top of the sidebar is the one whose snippet you are about to copy. How workspaces work explains what that name means.

A new workspace has the website agent switched on. Open Website agent in the sidebar and the snippet is waiting on Setup. If the page says it is switched off, email us and we will turn it back on. Until then a snippet on the site draws no button.

The workspace needs a website. The chat only loads on that host and its subdomains, on the same http or https scheme saved in the workspace. www and the bare domain count as the same host, so a site saved as https://acme.com also runs on https://www.acme.com and on https://shop.acme.com. It does not run on a different domain, on http when the saved site is https, or on localhost. If Settings has no website, add it before you install. On a workspace we set up for you, email us to set or change the website.

Finish the brief. Open Brief and fill in what you sell, who buys it, and the facts the chat should get right. With an unfinished brief the button can still appear, and the chat only asks visitors for their email. Answers start once the brief is saved. How to give the website agent its knowledge covers the brief and the answers you approve.

Booking is optional. If you want visitors to pick a time in the chat, open Scheduling, connect the calendar, and add an active meeting type, such as a 30 minute intro call. How to set up booking links is the full order, from the calendar connection to a link you can share. You can install the chat first and turn booking on afterwards. Until a meeting type is selected and active, the chat collects emails so the team can follow up.

Copy the snippet from Setup

Open Website agent, then Setup. You can also go straight to Website agent setup. The Snippet card shows one line:

<script src="https://pipelinesimple.com/chat.js" data-key="YOUR_KEY" async></script>

Press Copy snippet. The key in data-key belongs to this workspace. Use the line from the page rather than typing it, so the key is complete. Keys are long on purpose. A shortened or edited key is ignored and the button never appears.

The line under the snippet names the site it will run on. If that host is wrong, stop and fix the website on the workspace before you paste. Pasting a correct key on the wrong domain still shows nothing to visitors.

Set the greeting and the meeting

On the same Setup page, Chat settings is the form under the snippet. You can save it before or after you paste the line. The public chat uses the saved values the next time a visitor opens it.

Meeting to offer lists the meeting types in this workspace. Pick one and the chat offers the next open times on that calendar. The host of that meeting type also owns the leads the chat adds. Choose "None, collect emails only" when you want names and emails without a booking. A meeting type that is switched off behaves the same way: the chat collects emails and does not offer times.

Greeting is the first message visitors see. Leave it empty to use the default, which introduces your company and, when booking is on, says the chat can find a time with the team. A custom greeting can be up to 300 characters. Write it as the chat, and keep it plainly an assistant. The terms of the product ask you not to present the website agent as a person.

Press Save chat settings. A green notice confirms the save. If the meeting type is from another workspace, the form will not keep it. Meeting types belong to the workspace they were created in.

The Preview panel on the right opens the chat inside the app. Messages there are for you. They are not listed in Conversations, they do not create leads, and they do not book meetings. Use the preview to read the greeting and try a question before the button is on the live site. The preview works while the agent is switched on.

Paste the snippet into your site

Paste the line once, just before the closing </body> tag, in the template that every page uses. One paste covers the whole site. Pasting it on a single page limits the button to that page, which is fine for a test and too narrow for the live site.

On a hand-built site, put the line in the shared layout or footer include, above </body>. Publish that template and load any public page.

On WordPress, add it in the theme footer, immediately before </body> in footer.php, or in the footer scripts field your theme or a code-snippets plugin provides. A plugin that injects the line into the footer of every page is enough. Avoid putting it only in a single post.

On Shopify, open Online Store, then Themes, then Edit code, and add the line in layout/theme.liquid just before </body>. That layout wraps the shop, so the button shows on product pages as well as the homepage.

On Webflow, open Project settings, then Custom code, and paste the line into Footer code. Publish the site after you save. Webflow does not send custom code to the live site until you publish.

On Squarespace, open Settings, then Code injection, and paste the line into Footer. On older sites that field sits under Advanced.

On a Next.js, Remix, or similar app, add the same script tag to the root layout so it is present on every route. Keep it as a normal script tag with src, data-key, and async. The loader reads data-key from that tag.

A tag manager can inject the same line if the script tag stays on the page, with data-key set and a src that contains /chat.js. If the button never appears, move the line into the template. That is the path the Setup page is written for.

Leave async on the tag. The script is plain JavaScript and does not need a build step, a package, or a module bundler. Adding it twice is safe: the second copy sees that the chat is already running and stops.

Confirm the button is live

Open your live site in a browser where you are not looking at the Pipeline Simple app. You should see a dark Chat button, with a chat icon and the word Chat, fixed at the bottom right, above your own page. Click it. The panel opens with the greeting from Setup, and the button becomes a round close control.

Ask a question your brief answers, such as what you sell or who it is for. The reply should follow the brief. Ask something the brief does not cover. The chat should say the team will follow up, and the question should show up under Answers for someone to write a reply. Approved answers are used in later chats.

Leave a name and email in the test chat, then open Conversations. The chat should be listed, with the page it started on. Open Pipeline and find the same person. The lead is credited to the channel on that visit, from the campaign tags or the site they came from, and to Website agent when neither is there. You also get an email with the summary.

If booking is on, ask for a time and pick a slot. The invite goes out the same way as a booking from your booking page, and the conversation records the booking.

Check a second page, not only the homepage, and check a phone-width window. The button should be on both, and the phone layout should fill the screen. If you use a subdomain, such as a shop or a docs site on the same host, load that too.

What the chat remembers about a visit

The script notes the page the visitor is on and sends that URL with the chat, without the query string. Setup and each conversation show the page, so you can see whether people write from pricing, a feature page, or a post.

On the first page of a visit it also keeps the campaign tags src, utm_source, utm_medium, and utm_campaign, plus the site the visitor came from when that site is not your own. Moving between your pages does not replace that first touch. A lead created from the chat is attributed from those tags. A visit with none of them is attributed to Website agent.

The chat stores a token in the visitor's browser so the same conversation continues when they come back, including on a later visit. In the same tab, closing the panel and opening it again reopens that chat. We store a keyed hash of the IP address that changes every day, and we do not store the address itself.

When the button does not appear

Work down this list on the page where you expected the button. Each item is something the loader checks before it draws anything.

The agent is switched off. Setup shows a notice when it is off, and the live site shows no button. Email us to switch it back on. Conversations you already have stay readable.

The snippet is on a host the workspace does not allow. Compare the address in the browser with the host named under the snippet. A staging hostname on another domain, a preview URL from your host, and localhost all fail this check. Use the Preview panel on Setup to try the chat, and use the saved website to judge the live button.

The page is http and the workspace website is https, or the other way around. The scheme has to match. Serve the site on the same scheme you saved.

The line never made it into the published HTML. View the page source and search for chat.js. If it is missing, the template you edited is not the one the live site serves, or the site has not been published since you pasted. Theme editors, Webflow, and Shopify all need a save and a publish.

The key was edited. data-key has to be the value from Setup, 16 to 64 characters, letters, numbers, underscores, and hyphens. Anything else and the script returns without drawing a button.

A content security policy on your site blocks scripts from pipelinesimple.com, or blocks frames from it. The button is a script from our host, and the open chat is a frame from our host. Ask whoever runs the site to allow that script and that frame on your own domain.

An ad blocker or a privacy extension can hide the button in your own browser. Try a private window with extensions off, or another browser, before you treat it as a failed install.

Privacy and how you describe the chat

You tell your visitors about the chat in your own privacy notice, and you get any consent the law requires before the script runs, including for visitors in Europe. The website agent script itself does not wait for a consent banner. If your banner has to load first, inject the snippet only after the visitor accepts, or keep the line out of the template until that is how your site works.

The tracking snippet, ps.js, is the one that can wait for consent. Leaving that gate on does not gate the website agent. They are two tags.

Describe the button as an assistant for your company. Do not present it as a human teammate. The greeting on Setup is the right place to say what it can do: answer questions, and book a time when you have turned booking on.

Keep payment card numbers, bank details, government ID numbers, and health information out of the chat. The conversation is stored in your workspace so your team can read it and follow up.

After it is live

Conversations lists every chat from the live site. Each row shows when it happened, the page, and whether the visitor looks like a fit. Open a row for the transcript. The count at the top is conversations this month next to the number your plan covers. Far past that number the button stays up and the chat asks for an email instead of answering, so a busy month does not take the button down.

Answers is where you add the questions visitors ask and approve the ones the chat could not cover. Write the reply, save it, and the next message can use it. How to give the website agent its knowledge walks through the brief, adding an answer, and the open questions list.

Change the greeting or the meeting type on Setup whenever you like. You do not paste a new snippet for those edits. Paste a new snippet only if we issue a new key, or if you are installing the agent for a different workspace on a different site.

To take the button off the site, we switch the agent off and the loader stops drawing it, even while the line remains in your template. Removing the line from the template takes the script off the page as well. Email us if you want it switched off.

Questions

Do I need a developer to install it?

You need someone who can add one line to the site template and publish. On Webflow, Squarespace, and many WordPress themes that is a footer code field. On Shopify and a custom site it is the layout file, just before the closing body tag.

Will the chat show on every page?

Yes, when the snippet is in the shared template. A snippet pasted into one page shows the button on that page only.

Does it work on subdomains?

Yes. Any subdomain of the website saved on the workspace can show the chat, on the same http or https scheme. A different domain cannot, even with the same key.

Why does the button show in preview and not on my site?

Preview runs inside Pipeline Simple and skips the site check. The live button only loads on the website saved for the workspace, and only while the agent is switched on. Compare the host in your browser with the host named under the snippet.

Is this the same snippet as visit tracking?

No. The website agent is chat.js with your website-agent key. Visit tracking is ps.js with a site key. Install the line from Website agent, then Setup.

What if my brief is not finished?

The button can still appear. Until the brief is complete, the chat asks visitors for their email and does not answer questions. Finish the brief and answers start on the next chat.

Can visitors book a meeting from the chat?

Yes, after scheduling is on, a meeting type exists, it is active, and you select it on Setup. Otherwise the chat collects an email so your team can follow up.

Do test chats in Setup create leads?

No. The preview on Setup is not listed in Conversations, does not create a lead, and does not book a meeting. A chat on your own site does all three when the visitor leaves an email or picks a time.

The button was there yesterday and is gone today. What happened?

The agent was switched off, the website on the workspace changed, or the template no longer includes the snippet. Check the notice on Setup, confirm chat.js is still in the page source, and email us if the agent needs to be switched back on.

Open your workspace.

Sign in with your work email, or use it to create an account. We email you a link, no password needed.

Sign in →

Questions? support@pipelinesimple.com