Pixel tracking places a small script on the advertiser’s confirmation page. When the page loads, the pixel fires and sends the conversion to PalDock through the visitor’s browser.
It is the easiest method to deploy, but it runs in the browser, so it depends on cookies and can be blocked. Pair it with an S2S postback so you do not lose conversions when the pixel does not fire.
The two pixels
- The initiation pixel goes on every page. It captures the click and remembers it.
- The conversion pixel goes on the confirmation page only. It reports the conversion.
Both are needed. Without the initiation pixel there is nothing to attribute the conversion to.
There is also an update pixel, used to add URL and cookie data to a conversion that already exists.
Initiation pixel
On every page load, this pixel reads the click ID from the URL, stores it for the length of your attribution window, and hands it to the conversion pixel later. That is what credits the conversion to the right affiliate.
<script async src="https://palpxl.com/paldock-pixel-1.0.3.js?t=YOUR_TENANT&cookie=1&expiration=43200&pcidParam=pdcid"></script>
t: your PalDock account identifier (slug). Required.cookie: where the value is stored.1for a cookie (recommended),2for localStorage,0for sessionStorage.expiration: the attribution window in minutes.1440is one day,43200is 30 days. Without it, 30 days is used. A conversion that happens after the window closes is not attributed.pcidParam: the name of the URL parameter that carries the click ID. Without it, the pixel looks forpcid.
⚠️ Initiation scripts are versioned. When we release an update, you normally only change the version number in the script, not the implementation.
Conversion pixel
Placed on the confirmation page only. It creates the conversion and attaches everything needed for attribution and reporting.
<script>
(function(w,p){p=w.paldock=w.paldock||{};p.q=p.q||[];p.conversion=p.conversion||function(){p.q.push(["conversion"].concat([].slice.call(arguments)))}})(window);
// Create a new conversion of type "sale"
paldock.conversion({
action: 'create',
type: 'sale',
advertiser_id: 'advertiser_id',
external_id: 'external_id',
result: 'approved',
value: 100.55,
commission: 100.55,
commission_id: 'commission_id',
affs1: 'affs1',
advs10: 'advs10',
pcidCookie: 'custom_name',
pcidCookieFallback: true,
queryParam: {
key1: 'utm_content',
key2: 'utm_medium',
key3: 'utm_source'
},
cookieParam: {
key1: '_ga',
key2: 'fbp',
key3: 'fbc'
}
});
</script>
Required: type, advertiser_id, and external_id.
The most common optional ones:
result: approved or rejected. Without it, the transaction is created as pending.value: the order value, used by percentage commissions.commission: the payout amount, when the advertiser sends it directly.commission_id: which commission applies, when the type has more than one.
The full list is on Tracking parameters.
Who the pixel belongs to
The same conversion type has two pixel versions, and you pick the one that matches who places it.
- Advertisers report conversions, so they can create and update. Requires the advertiser ID and the external ID.
- Affiliate partners enrich their own conversions with URL and cookie data, so they can only update. Requires the affiliate ID.
Both are in Workspace Settings, Tracking, Conversion types and pixels. Pick the conversion type, then choose the advertiser or affiliate view. Custom types are added in the same place, and each of them gets its own pixel.
Matching the conversion
The pixel needs to say which click or lead the conversion belongs to.
- Origin ID, taken from the cookie by the initiation pixel, or passed explicitly.
- Advertiser ID with External ID, when the advertiser has their own order ID.
Affiliate links can only use the Origin ID, because the External ID does not exist yet at click time. iFrame and API integrations can use either. Sending both is safest.
See Conversion IDs explained and Tracking processing.
Using your own cookie
If the advertiser does not want the PalDock initiation pixel, the conversion pixel can read the click ID from a cookie you control.
pcidCookie: 'custom_name'reads the value from your cookie instead ofpdc_pcid_[tenant-name]. PalDock’s own cookie handling is then not used, and storing the click ID is up to you.pcidCookieFallback: truefalls back to the PalDock cookie when your cookie is empty. The default is false.
pcidCookie cannot read HttpOnly cookies. Remove the flag or write a non-HttpOnly mirror cookie. To check: press F12, open the Application tab in Chrome or Edge, or Storage in Firefox, expand Cookies, select the domain, and look at the HttpOnly column.
The cookie
The initiation pixel stores the value in pdc_pcid_[tenant-name]:
{"pcid":"1245","expiration":1779778729419}
The expiration timestamp comes from the expiration setting in the initiation pixel.
The cookie itself lives longer than that timestamp on purpose. Always check the timestamp before using the value, not whether the cookie still exists.
Cookie consent
- ⚠️ If you use Cookiebot or a similar tool, set it to reload the page after consent, or at least to fire the scripts that were blocked. Otherwise the initiation pixel never runs, no click ID is stored, and you have to handle it yourself.
- The conversion pixel does not need consent. It stores nothing in the browser, it only reports an event, so it falls outside cookie consent under GDPR.
Troubleshooting
See How to set up pixel tracking for placement, triggers, ad blockers, and CSP problems.

