Publisher quick start
The end-to-end path for a publisher integrating Inline AI: what to send the integration team, how to allowlist the crawler, how to install the embed script, and the two ways to control where each placement appears on your pages.
Inline builds conversational agents for publishers. Readers ask questions about the article in front of them, Inline answers from your own content, and where appropriate it surfaces sponsored products.
This page is the full integration path, from kickoff to a live page. Steps 1 to 4 are required. Everything under Optional add-ons is not.
Before you start
Send the following to your Inline account manager or to support@getinline.io. Inline uses these to configure your account and start ingesting content.
| What to send | Why Inline needs it |
|---|---|
| List of domains | Every domain where Inline will be deployed. |
| Staging environment | The staging domain plus credentials, if you have one. Lets you test before production. |
| Sitemap URL | The location of your sitemap.xml, so Inline can learn your site structure. |
| RSS feeds | Feed URLs for content ingestion and ongoing updates. |
| Custom APIs or MCP servers | Documentation for any API or MCP server that powers an on-site experience you want Inline to use. |
You also need a Publisher ID. Your Inline contact provides it, or you can copy it from the settings page of the Inline dashboard.
1. Allowlist the Inline crawler
Inline cannot answer questions about your content until it can read your content. Allowlist this user agent in robots.txt, in your WAF, and in any bot-management product you run:
Inline-AI-Crawler/0.1 (+https://getinline.io; support@getinline.io)The product token to match is Inline-AI-Crawler:
User-agent: Inline-AI-Crawler
Allow: /Behind Cloudflare? Follow the Cloudflare unblock guide.
2. Test on staging (optional but recommended)
If you have a staging environment, install the embed there first and confirm the placements render where you expect. Add the snippet to the <head> of your staging pages and replace YOUR_PUBLISHER_ID with your real Publisher ID:
<script>
(function(d) {
var s = d.createElement('script');
s.type = 'module';
s.src = 'https://getinline.tech/default/assets/index.js?key=YOUR_PUBLISHER_ID';
(d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
})(window.top.document);
</script>Tell your Inline contact the staging domain so it can be added to your account. The embed only initializes on domains registered against your Publisher ID.
3. Add the embed script in production
The integration is one <script> tag. There is no server-side API to call and no build step. Choose the installation method that matches how your site manages third-party tags.
Use your tag manager, for example Google Tag Manager, so you can change or remove Inline without a site deploy.
- Create a new Custom HTML tag.
- Paste the snippet below and replace
YOUR_PUBLISHER_ID. - Set the tag to fire on all pages, or on the specific pages where Inline should run.
- Publish the container.
<script>
(function(d) {
var s = d.createElement('script');
s.type = 'module';
s.src = 'https://getinline.tech/default/assets/index.js?key=YOUR_PUBLISHER_ID';
(d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
})(window.top.document);
</script>On the next page load, the SDK reads your dashboard configuration and renders every enabled placement. By default the Widget sidebar appears with a floating trigger button in the bottom corner. This is auto mode, and it needs no JavaScript from you. See integration modes if you need programmatic control instead.
4. Choose where placements appear
Two placement types attach to the page body and need no target: the Floating Action Button (the Widget sidebar trigger) and the Search FAB. Every other placement renders inside an element on your page, so Inline has to know which element that is.
There are two ways to answer that question. You can pick a different one per placement, and you can start with automated targeting and add anchor divs later.
| Placement anchor divs | Automated targeting | |
|---|---|---|
| Who controls the position | You | Inline, from the dashboard |
| Needs a template change | Yes, once | No |
| Survives a site redesign | Yes | Only if the targeted selector survives |
| Best for | Exact, stable placement in article templates | Fast rollout, sites you cannot easily edit |
Option A: placement anchor divs
Add an empty anchor div to your template at each spot where you want an Inline unit. Inline renders its unit inside the div you supply, and changes nothing else about the div.
Name the id using the pattern inline-ai-<placement>-embed:
<!-- Basic embed -->
<div id="inline-ai-basic-embed"></div>
<!-- Integrated Chat embed -->
<div id="inline-ai-integrated-chat-embed"></div>
<!-- Search embed (inline search bar) -->
<div id="inline-ai-search-embed"></div>
<!-- Search icon -->
<div id="inline-ai-search-icon"></div>
<!-- Key Takeaways embed -->
<div id="inline-ai-key-takeaways-embed"></div>In-Content Questions work differently. The div is the container Inline scans, not a single insertion point. Wrap the element that holds your article body paragraphs, or put the ID on it directly:
<div id="inline-ai-in-content-embed">
<!-- your article body -->
</div>The Floating Action Button and the Search FAB are page-level. They do not need an anchor div.
Send the list of IDs you added to support@getinline.io and Inline points the matching placement at each one in your configuration.
Placement ID reference
| Placement | Anchor div ID |
|---|---|
| Basic embed | inline-ai-basic-embed |
| Key Takeaways embed | inline-ai-key-takeaways-embed |
| Integrated Chat embed | inline-ai-integrated-chat-embed |
| In-Content Questions | inline-ai-in-content-embed (container to scan) |
| Search embed | inline-ai-search-embed |
| Search icon | inline-ai-search-icon |
| Floating Action Button | Not needed (page-level) |
| Search FAB | Not needed (page-level) |
Rules
- One div per placement, per page. IDs must be unique in the document. If the same ID appears twice, both browsers and Inline use the first one.
- Leave the div empty. Do not put content inside it, and do not give it a fixed height. Inline sizes its own container. A
max-widthon your page wrapper is fine. - The div must be in the HTML at page load. Inline resolves targets once, when placements load. It does not watch for elements that arrive later. If your div is rendered by client-side JavaScript, tell the Inline team. They will switch you to the programmatic
mount()API, which handles that case. - Keep the div outside a re-rendering framework subtree. If the anchor lives inside a React or Vue component that re-renders, the framework removes Inline's content on the next render. Put the anchor in server-rendered markup, or use
mount(). - Display ad unit IDs are separate. Ad slot div IDs come from your Google Ad Manager setup and do not follow this convention. See display ads.
Option B: automated targeting
If you cannot change your page templates, Inline can target elements that already exist on your pages. You configure nothing on your side. Inline configures the target from the dashboard, using one of three matching methods:
- Element ID, when your pages already have a stable ID at the right spot.
- CSS selector, for a class, an attribute, or a structural match such as
main > aside:first-child. - Dynamic matching, by tag name plus an optional attribute name and value, for pages whose IDs and class names are generated at build time.
Inline also controls whether the placement is inserted above, below, inside the top of, or inside the bottom of the matched element. The full syntax is in injection targets.
5. Verify the install
- Load any page on the site.
- Confirm the Widget trigger button appears in the bottom corner.
- Confirm each targeted placement renders in the slot you expect.
- Open a placement and ask a question about the page.
Nothing renders? Work through this in order:
- Confirm the
<script>tag is present in the page source and that?key=holds your real Publisher ID. - Open the dashboard and confirm the placement is enabled for the publisher.
- Confirm the domain is registered against your Publisher ID.
- Hard-refresh the page.
- Check the browser console for messages prefixed with
Inline.
If it still does not render, send the page URL to support@getinline.io.
Optional add-ons
Display ads
Inline can render display ad units inside its placements. There are two arrangements.
- Send your Google Ad Manager network code and the email address on the GAM account to your Inline account manager.
- Accept the Multiple Customer Management (MCM) request that Inline emails to that address.
- Update your
ads.txtwith the entries Inline sends you.
Custom system prompts
Inline writes two system prompts for you automatically, and you can edit both.
- Suggested questions. Controls the questions Inline offers readers. Readers ask two broad kinds of question about editorial content: exploratory and transactional. Give context about your site and list example questions of each kind.
- Answering questions. Controls how the agents respond. Two agents do the work:
contentSearchsearches your published content, andproductSearchfinds relevant products. Give context about your site, list strict rules, add example question and answer pairs, and write the fallback response for when the agents cannot answer.
Native ads and product feeds
Inline includes sponsored products, native ads, and sponsored links in conversations by default, sourced from its own brand and retailer partners.
To add your own product listings, contact support@getinline.io. Inline can ingest products by CSV, by API, or directly from an affiliate partner.
Follow the Google RSS 2.0 product feed specification. The minimum fields Inline needs are:
| Field | Notes |
|---|---|
id | A unique offer ID from the merchant. |
gtin and/or mpn | Uniquely identifies the product. |
title | |
description | |
link | The click-through URL, with all UTM parameters. Add a campaign ID parameter so you can attribute conversions to Inline. |
image_link | |
brand | |
price | |
availability |
Next steps
The AI features Inline renders, and which ones need a target element.
Injection targetsThe full targeting syntax behind automated targeting.
Integration modesAuto, programmatic, and hybrid. Pick a different mode if you need JavaScript control.
Crawler referenceUser agent, IP addresses, and Web Bot Auth signature for allowlisting.
Need help?
Contact support@getinline.io or sam@getinline.io.