Skip to content
Pairfully
  • Product
  • Sample report
  • Pricing
  • Docs
Log inStart free

Docs

  • Install
  • MCP server
  • API reference

On this page

  • The snippet
  • Plain HTML
  • WooCommerce and WordPress
  • Webflow
  • Framer
  • Next.js (App Router)
  • Shopify
  • Goals
  • Leads
  • Verify
  • What is collected

Docs

Install Pairfully

One script tag, loaded after your page. It is 2.5 KB gzipped, sets no cookies and sends small batches, with sendBeacon when the tab is hidden, so it never delays a navigation.

The snippet

Your real key is on the Settings page once you have added a site. The one below is a placeholder: copy yours from the dashboard, not from here.

HTML
<script defer src="https://api.pairfully.com/p.js" data-site="pf_live_7f3a9c2e"></script>

Plain HTML

  1. Open the template that renders <head> on every page.
  2. Paste the line before </head>.
  3. Deploy. Events arrive within a few seconds of the first visit.
index.html
<script defer src="https://api.pairfully.com/p.js" data-site="pf_live_7f3a9c2e"></script>

WooCommerce and WordPress

  1. Appearance → Theme File Editor → header.php, or a header-scripts plugin if you don’t edit theme files.
  2. Paste the line above </head>.
  3. Purchases are counted from WooCommerce’s order-received page.
header.php
<?php wp_head(); ?>
<script defer src="https://api.pairfully.com/p.js" data-site="pf_live_7f3a9c2e"></script>
</head>

Webflow

  1. Site settings → Custom code → Head code.
  2. Paste the line and publish the site.
Head code
<script defer src="https://api.pairfully.com/p.js" data-site="pf_live_7f3a9c2e"></script>

Framer

  1. Site settings → General → Custom code → Start of <head> tag.
  2. Paste the line and publish.
Start of <head>
<script defer src="https://api.pairfully.com/p.js" data-site="pf_live_7f3a9c2e"></script>

Next.js (App Router)

  1. Use next/script so the tag loads once across navigations.
  2. Put it in the root layout, inside <body>, so every route is covered.
  3. Route changes are tracked automatically.
app/layout.tsx
import Script from 'next/script';

export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body>
        {children}
        <Script
          src="https://api.pairfully.com/p.js"
          data-site="pf_live_7f3a9c2e"
          strategy="afterInteractive"
        />
      </body>
    </html>
  );
}

Shopify

Not fully yet. Shopify doesn’t let theme scripts run inside checkout, so Pairfully can’t see purchases there, and a report without purchases would be wrong. A Shopify pixel that fixes this is being built. WooCommerce, WordPress, Webflow, Framer and custom sites work today.

Mark a goal

When you add your site, name the page people see after they buy or sign up; a visit that reaches it counts as converted. WooCommerce stores are counted from the order-received page. For anything else, such as a booking or a quote request, call goal once it happens. The visit is then counted as converted, and no exit reason is given for it.

JavaScript
window.pairfully.goal('signup');

The script exposes window.pairfully once it loads, so call it from code that runs after the page, such as a submit handler.

Identify a lead

When a contact or quote form is submitted, pass the fields that describe the request. Emails, phone numbers and fields named like contact details are removed before anything is stored or judged. Free text, such as a message, is kept, so don’t pass anything you wouldn’t want stored.

JavaScript
form.addEventListener('submit', () => {
  window.pairfully.identifyLead({
    company: form.company.value,
    message: form.message.value,
    budget: form.budget.value,
  });
});

The lead is scored for fit and intent against the ideal-customer description on your site settings, flagged if it reads as spam, and routed to sales, support, partnership or recruiting.

Verify the install

Open your site once, then the Settings page. “Last event” updates within a minute. Visits appear once they go quiet, about 30 minutes after the last event, and are judged shortly after. If nothing arrives, check the key matches and that a content-security policy allows cdn.pairfully.com in script-src and connect-src.

What is collected

  • Page paths, in order, with timing. Parts that look like an email address or a long number are replaced with * before sending.
  • The referring site and page, and UTM tags on the landing URL. Other query parameters are never sent.
  • The furthest scroll depth on each page.
  • Clicks on links and buttons, by their visible label cut at 40 characters, and rage clicks labelled the same way.
  • That a form was started, sent or rejected, and which field was invalid. Never what was typed.
  • JavaScript error messages, cut at 120 characters. Device class and country.
  • No cookies and no localStorage. A random tab id lives in sessionStorage until the tab closes, and the server keeps a daily hash of the connection to count return visits that day.

Every field and every company that handles it is in the data sheet.

Pairfully

Why serious visitors left without buying, in your inbox every Monday.

Product

  • What you get
  • Sample report
  • How it decides
  • Pricing
  • Install guides
  • MCP server
  • API

Company

  • Why I built this
  • hello@pairfully.com
  • Log in

Legal

  • Privacy policy
  • Data sheet
  • Terms
  • Refund policy

© 2026 Pairfully