Products

SignupCops

Sign in with Google sends your visitor away and back, and the ad click ID is lost on the way. SignupCops holds the click ID in the visitor's session, joins it to the signup when your app calls identifyUser, and sends the signup to Meta, Google Ads and TikTok as a CompleteRegistration conversion. No CRM, no offline sync, no mapping step.

The problem

A visitor clicks your ad and lands with a gclid, fbclid or ttclid in the URL. They press Sign in with Google, leave your site for the login, and come back as a registered user. The click ID does not come back with them, and there is no form submit for a pixel to catch.

Most teams already sync signups to their ad platforms through a CRM. The registration arrives, but with no click ID, so the platform files it as an unknown conversion and credits no ad. You paid for the click and got the customer, and the platform thinks the ad did nothing. The same happens with Sign in with Apple and any other login that redirects.

How it works

  1. Ad click. The DataCops script runs on your own domain and saves the click ID as the session starts.
  2. Session waits. While Google handles the login, the session keeps holding the click ID.
  3. identifyUser. Back on your site, your signup success handler calls identifyUser(email, { ... }).
  4. Joined. DataCops attaches the email, name, phone and your user ID to the waiting session, next to the click ID.
  5. Checked. The signup gets a verified profile: email risk, IP type (VPN, proxy, datacenter) and other accounts seen on the same device.
  6. Sent. A new, clean signup fires CompleteRegistration, delivered server-side to your connected ad accounts (Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest and X).

The ad platforms also receive the hashed email, so the signup still matches when the visitor arrived with no click ID at all.

Before you start

identifyUser is added to window.dcutils by the DataCops script. Install the script on every page and subdomain where a signup can finish. Installing it on the root domain does not cover app.yourdomain.com. Use the same cop key everywhere, because the key, not the domain, routes every signup to your DataCops account.

window.dcutils existing is not proof the script works. It is a small queue that loads first. The real engine, window.dataCopsAnalytics, appears a few seconds later. If it never appears on a page, calls wait in the queue with no error. Check both in the console before debugging your own code.

The one call

Call identifyUser the moment a signup completes, on whichever page that happens. For Sign in with Google or any OAuth login you already have the email in your success handler, so call it there, the same as after a password form. DataCops cannot see an OAuth redirect on its own. This call is what makes it visible.

window.dcutils.identifyUser(email, {
  externalId: user.id,
  firstName: user.firstName,
  lastName: user.lastName,
  phone: user.phone,
  signupMethod: 'google',
  accountCreatedAt: user.createdAt,
});

Delivery starts on its own. There is nothing to map in the dashboard.

Send the full person

Every field in the second argument is optional. Send what your code has and leave the rest out. Never send placeholders. The session id, click IDs, IP, browser and ad cookies are attached by the script, so you never send those.

  • externalId. Your own user ID. The strongest match field.
  • firstName, lastName, phone. As stored. Phone with the country code. DataCops formats them for each platform.
  • city, state, zip, country. Only if you store them. Otherwise DataCops uses the session location.
  • value, currency. What the signup is worth, such as a plan price or deposit. Platforms bid on this.
  • signupMethod. email, google, apple or phone.
  • accountCreatedAt. The real account creation time. Needed for correct counting, see below.

A later call with fewer fields never erases richer data sent earlier.

Signup or sign-in

Call identifyUser after sign-in as well as signup. The first call for an email is the signup, and later calls merge onto the same person. Pass accountCreatedAt: an account created more than an hour before the call is treated as a sign-in and no conversion is sent. Without it, every email DataCops sees for the first time counts as a signup, including users who existed before you installed DataCops.

Risky signups

Signups whose email scores high or critical risk, or uses a disposable domain, are saved and shown to you but held back from your ad platforms. Signups from sessions already flagged as bots are not enriched, so their details never ride on a conversion. Each signup also lists other emails seen on the same device, which makes free-trial and referral abuse visible. Blocking a signup outright is a separate, optional server-side step.

Check it worked

Do a real signup through your ad-style URL, for example with ?gclid=test123, then open Signup conversions in the DataCops dashboard. The signup should appear within seconds with its click ID, and the delivery log shows what was sent to each platform and why anything was skipped. If you also use DataCops automatic form capture, both paths write to the same record by email, so one signup never sends twice.

Was this page helpful?