Click
The ad network sends the visitor with its click ID in our link (cid=…). Redsoft saves it.
Affiliates buy traffic on ad networks like ExoClick. To spend their money well, the network must learn which clicks became signups and buyers. With S2S (server-to-server), Redsoft tells the network directly: reliable, and nothing the visitor’s browser can block.
The ad network sends the visitor with its click ID in our link (cid=…). Redsoft saves it.
The visitor signs up or pays. Redsoft confirms it on its own servers.
Redsoft sends the click ID back to the network, which counts the conversion on that exact click.
Create a campaign, add its MTL and VTL links, then attach tracking once for the whole campaign.
Every MTL and VTL link below uses the same saved click-ID mapping and event destinations.
Select a campaign to manage its links and conversion tracking.
| Campaign | Traffic source | Country | Campaign links | Tracking | |
|---|---|---|---|---|---|
| ExoClick · UK Golden GlamDR-EXO-UK-001 | ExoClick | United Kingdom | 1 MTL · 3 VTL | 2 events active | |
| EvaDav · AU ModelsDR-BEMOB-AU-002 | EvaDav, tracked through BeMob | Australia | 1 MTL · 4 VTL | 3 events active | |
| Google Search · UKDR-GADS-UK-003 | Google Ads | United Kingdom | 1 MTL | Draft |
Campaign ID: DR-EXO-UK-001 · DarkRoseDating · United Kingdom
cidReceives ExoClick’s {conversions_tracking}external_click_idKept 30 days · last click wins · locked at signupThese links can point to different models. Tracking does not need to be configured again for each link.
| Type | Link name | DarkRoseDating campaign URL | Uses campaign tracking |
|---|---|---|---|
| MTL | Main UK landing pageDefault campaign entry | https://www.darkrosedating.com/lp005/?ref_ids=lpWWpJalmqacmpeon6CSlKeiYZJk&cid={conversions_tracking} | ✓ Inherited |
| VTL | Golden GlamModel route: gg | https://www.darkrosedating.com/lp005/?ref_ids=lpWWpJalmqacmpeon6CSlKeiYZJk&srcm=gg&cid={conversions_tracking} | ✓ Inherited |
| VTL | LilithModel route: lilith | https://www.darkrosedating.com/lp005/?ref_ids=lpWWpJalmqacmpeon6CSlKeiYZJk&srcm=lilith&cid={conversions_tracking} | ✓ Inherited |
| VTL | Golden Glam profileDirect model page | https://www.darkrosedating.com/profile/Golden-Glam50s?ref_ids=lpWWpJalmqacmpeon6CSlKeiYZJk&cid={conversions_tracking} | ✓ Inherited |
Redsoft adds cid={conversions_tracking} to every link automatically, based on the platform preset of the assigned tracking setup. The affiliate never types it. ref_ids tells Redsoft which campaign link the visitor came through, and therefore which tracking setup applies.
This campaign uses the tracking setup below. Its saved event rules apply to every campaign link.
Fires once, when the signup is completed.
http://s.magsrv.com/tag.php?goal=e43b3ba9187ce9d08b25f2a51f33b876&tag={conversions_tracking}Fires once per user, on their first successful payment.
http://s.magsrv.com/tag.php?goal=10151cea167cf2cc1156ca7a033a9fa7&tag={conversions_tracking}Manage the click-ID mapping and conversion rules attached to each DarkRoseDating campaign.
The click ID identifies the external click. The assigned tracking setup tells Redsoft which registration, purchase or package rule to use. Campaign names are labels only.
Custom S2S · DR-EXO-UK-001
Custom S2S · DR-BEMOB-AU-002
Google Ads browser event · DR-GADS-UK-003
Direct ExoClick S2S goals for every link in campaign DR-EXO-UK-001.
Pick your platform. Redsoft then prepares all your campaign links for it automatically.
| Type | Link | URL to paste |
|---|
The same for every affiliate and campaign.
A click can earn a signup for 30 days after it happened. Older clicks are ignored.
If a visitor clicked several affiliate links before signing up, the most recent click gets the credit.
At signup the winning click is saved on the user. Every later purchase of that user belongs to that click, for life. New clicks don’t change it.
Your network may only accept conversions for a limited time after the click. That limit is set by the network, not by Redsoft.
Turn on only what you need and paste a postback URL for each. Each event fires at an exact, verified moment, for every link in this campaign.
Buyers are rare at first. Signups give your network enough data to find which zones work.
Move bidding to zones that produce real buyers.
Bid more on zones that bring repeat or high-value buyers.
{package_tier} to your purchase postback and split the report by package inside your tracker. No extra conversions are counted.“Send test” sends each turned-on postback once, marked as a test, and shows the platform’s answer.
To see the test arrive in your platform, open your own ad or tracker link once, copy the click ID your platform shows for that click, and paste it here. Without it, Redsoft uses a dummy ID. That only proves the URL works, because platforms ignore conversions for click IDs they don’t know.
This is browser-based tracking, not S2S. Paste Google’s generated event snippet and Redsoft extracts the send_to value.
A separate advanced integration requiring Google account authorization through OAuth.
gclid, gbraid, or wbraid from the campaign linkEvery postback Redsoft sent, skipped or retried, with the exact URL and the platform’s answer.
If ExoClick shows 40 conversions and Redsoft shows 52, this log shows which postbacks failed, were skipped or never had a click ID. No developer ticket is needed.
Click a row to see the full request and response.
| Time | Event | Campaign · link | Click ID | Status | Answer | Tries |
|---|
The platform answered with a success code (2xx). The conversion should appear in its report.
The platform didn’t answer or had a temporary error. Redsoft tries again automatically after 1 min, 5 min, 30 min, 2 h and 6 h.
All retries used, or the platform rejected the URL (4xx). Usually a wrong goal ID or key. Fix the setup and press Retry.
The visitor came through your link but without a click ID, for example because the link was opened directly instead of through the ad, so the macro was never filled in. The event is recorded in Redsoft, but nothing is sent. No IDs are ever invented.
The same conversion was already delivered, for example after a page reload or a repeated payment notice. Sending it again would double-count.
Sent with the “Send test” button using a test click ID. Not a real conversion.
One example visitor, from the ad click to the last purchase. Press play, or step through it at your own pace.
A single internal language that works with ExoClick, BeMob, Voluum, RedTrack and custom postbacks.
For example, ExoClick’s {conversions_tracking} and PropellerAds’ ${SUBID} both become external_click_id inside Redsoft.
Affiliates using a listed platform don’t need these: Redsoft recognises the platform’s own click-ID marker (e.g. {conversions_tracking}) automatically. These names are for “Custom” platforms and extra fields. Anything else in curly brackets is rejected when saving.
| Redsoft placeholder | What Redsoft inserts | Example value | Typical use |
|---|---|---|---|
{external_click_id}Custom platforms | The complete click identifier captured from the campaign link. Listed platforms don’t need it: their own slot (e.g. {conversions_tracking}) is recognised. | EXAMPLE_CLICK_IDReal IDs are longer. Always send the full value. | ExoClick tag, BeMob cid, PropellerAds visitor_id |
{event_id} | Unique Redsoft ID for this conversion | EVT-501 | Tracker transaction ID / deduplication |
{order_id} | Unique DarkRoseDating payment order ID (purchase events only) | ORDER-1001 | Purchase transaction ID |
{event_name} | The Redsoft event that occurred | registration, first_purchase, purchase, package_3 | Trackers that take an event-type parameter |
{package_tier} | The purchased coin package (purchase events only) | package_3 | Split purchases by package in a tracker without extra goals |
{payout}Later | Conversion value | — | Not part of version 1 |
{currency}Later | Three-letter currency code | — | Not part of version 1 (only needed with payout) |
The fixed list of moments Redsoft can report. One payment can trigger more than one event (see the ⚠ notes).
| Event | Fires when | How often per user | Fires together with |
|---|---|---|---|
registration | Signup completed | Once | — |
first_purchase | First successful payment | Once | ⚠ purchase and the matching package event |
purchase (Every purchase) | Any successful payment | Every payment | ⚠ first_purchase (on the first one) and the package event |
package_1 … package_4 | That coin package was bought | Every time it is bought | ⚠ purchase, and first_purchase if it was the first |
...?cid={conversions_tracking}external_click_id = EXAMPLE_CLICK_ID...&tag=EXAMPLE_CLICK_IDEXAMPLE_CLICK_ID is a stand-in, not a real ExoClick ID. Production must store and return the complete value supplied by the platform, unchanged.
One possible way to build the concept shown in this prototype. Technical details are in the .
The developers can adapt the data model, naming, queues and frontend integration to Redsoft’s existing architecture. What matters is keeping the relationships, the attribution rules and the verified-event flow.
Store campaign details separately from tracking instructions. The campaign contains its name, country and MTL/VTL links. The tracking setup contains the platform preset, the incoming click parameter and the postback for each conversion event.
Assign one saved tracking setup to the campaign. Redsoft gives that setup a neutral internal ID, such as TRACKING-SETUP-1. This ID points to the saved set of event rules. It is never sent to the external platform. One setup can be reused by several campaigns. Each campaign has exactly one setup.
The campaign name is only descriptive. The assigned setup, not a name such as “ExoClick”, tells Redsoft how to capture the click ID and where to deliver conversions.
campaigncampaign_linktracking_setupevent_ruleLet the affiliate create a campaign, then add every MTL or VTL link that belongs to it. Give the campaign a unique campaign ID and each link a unique link ID.
Each link sends visitors to a chosen place on DarkRoseDating, such as a model page, a profile or a landing page. A routing value such as srcm=gg selects that experience. Routing is separate from S2S tracking. When a tracking setup is assigned, Redsoft automatically adds its click-ID parameter (e.g. cid={conversions_tracking}) to every link in the campaign.
* Testing option: different links could be compared in an A/B test to see which page produces more registrations or purchases.
The campaign ID groups the activity. The link ID shows which exact link produced the visit. The affiliate sets up tracking once per campaign, not once per model link.
Offer a list of platform presets (ExoClick, TrafficStars, PropellerAds, EvaDav, BeMob, Voluum, RedTrack, Binom, Keitaro) plus “Custom”. Each preset holds the URL parameter and the platform’s click macro, so the affiliate never sees them. Only “Custom” asks the affiliate to type both.
ExoClick replaces {conversions_tracking} with the real click value before sending the visitor. Redsoft reads the configured cid parameter and stores that value as external_click_id. PropellerAds uses ${SUBID}, RedTrack uses {clickid}, and so on. All of them end up in the same internal field.
Most setup mistakes are a wrong macro name. Presets remove that risk. A consistent internal field lets the delivery process work the same way for every platform. Preset values must be verified against each platform’s documentation before release.
ExoClick: cid={conversions_tracking} → external_click_idPropellerAds: cid=${SUBID} → external_click_idCustom: chosen parameter → external_click_idOn the first request, identify the campaign link from its reference in the URL (today ref_ids). Then save a click record: the full external click ID, campaign, exact link, tracking-setup ID and time. Keep it connected to the visitor (first-party cookie + server-side record). At signup, find the winning click and save it on the new user permanently.
30 days: only clicks from the last 30 days count. Last click: if there are several, the newest wins. Locked at signup: once the user exists, every future conversion uses the click saved on the user, even if they later click another affiliate’s link. This also works when they buy later on another device, because the click is on the account, not in the browser. Note that each ad network only accepts conversions for a limited time after its click. Redsoft still records and logs late purchases.
A click ID identifies the visit, not the platform or setup. Saving the setup ID with the click means Redsoft never guesses. Locking at signup means purchases days or weeks later still reach the right affiliate.
user_id = 5531 · external_click_id = EXAMPLE_CLICK_ID · tracking_setup_id = TRACKING-SETUP-1 · campaign_link_id = LINK-GG-01 · clicked_at = day 0 10:02Define a fixed list of events: registration (signup completed), first_purchase, purchase (every purchase) and package_1…package_4. Connect each to the backend action that confirms it. For purchases, that is the confirmed payment, not the button click.
One confirmed payment can produce several events. A user’s first payment for Package 3 produces first_purchase, purchase and package_3. Redsoft records all of them internally, then sends a postback only for those the affiliate turned on. Each event uses its own postback URL.
Affiliates optimise in stages: signups first, then first purchases, then repeat or high-value buyers. Giving them separate events supports every stage. The ⚠ notes in the editor, and a warning when two events share the same goal URL, protect them from counting one payment twice.
registrationfirst_purchasepurchasepackage_1 … package_4Picks the platform, turns on an event such as Registration and pastes the postback URL exactly as the platform gives it. Nothing else, and the URL is saved and shown exactly as pasted. Platform postbacks contain an empty slot for the click ID (ExoClick writes {conversions_tracking}, BeMob writes REPLACE). Redsoft recognises that slot in the background when sending, and leaves out fields marked OPTIONAL.
After Redsoft confirms the registration, it takes the saved URL, puts the complete stored click ID (URL-encoded) into the platform’s click-ID slot, sends the request, and writes the result to the postback log. Purchase events work the same way with their own URLs.
Redsoft needs to know when to send (the event), where to send (the saved URL) and which click it belongs to (the stored click ID).
Campaign click: ExoClick replaces {conversions_tracking} | Conversion delivery: Redsoft fills the same {conversions_tracking} slot in the pasted postback with the complete stored click IDLoad the main Google tag once. Save the relevant Google Ads send_to value against each Redsoft event, for example one for registration and separate values for Package 1 and Package 2.
After the application receives the verified Redsoft result, browser code selects only that event’s send_to value and runs one gtag('event', 'conversion', ...) command with the correct transaction ID. If the payment is confirmed after the visitor left the page, the event can fire on their next page load (to be agreed with the developers).
If every snippet ran from the header, Google would receive conversions that did not happen. Only the confirmed event may fire. This is a browser event, not S2S.
Package 2 confirmed → select Package 2 send_to → fire one Google conversion eventAlways record the event internally. Before sending, check that the user has a click ID and that this exact conversion was not already delivered. If the platform fails, retry automatically. A click ID that is empty, or is still the unfilled macro text (for example the literal {conversions_tracking} when someone opens the link directly), counts as missing.
Build an idempotency key such as TRACKING-SETUP-1 + first_purchase + USER-5531 (or + ORDER-1001 for purchases). If a delivered row with that key exists, skip it. On a timeout or 5xx answer, retry after 1 min, 5 min, 30 min, 2 h and 6 h. A 4xx answer means a wrong URL, so mark it Failed straight away.
Networks must not receive invented IDs. Payment providers often send the same notice twice, and visitors reload pages. Without these checks, purchases would be counted twice.
record internal eventskip missing click IDskip duplicatesretry temporary failuresWrite one log row per postback (retries update the same row): time, event, campaign, link, click ID, final URL, HTTP status, response body (first 500 characters), attempts and status. Show it to the affiliate, filtered to their own campaigns.
Statuses: Delivered, Retrying, Failed, Skipped · no click ID, Skipped · duplicate, Test. A failed row has a Retry button after the affiliate fixes the setup.
When an affiliate says “ExoClick shows fewer conversions than you”, the log answers it in seconds. Without it, every question becomes a developer ticket.
Check that every URL is valid and contains {external_click_id}. Then let the affiliate press “Send test” for each event. Redsoft sends a real request and shows the answer.
Platforms ignore conversions for click IDs they don’t know. So the affiliate first makes one test click on their own ad or tracker link and pastes that click ID. The test then appears in the platform’s report, which proves the goal is correct. Without a real ID, Redsoft uses a dummy one, which only proves the URL is reachable. Tests are logged with the status Test and never count as conversions in Redsoft.
A valid-looking URL can still have the wrong goal. Testing catches that before real money is spent. Roll out on one campaign first, compare numbers, then expand.
check URLs → send test → see it arrive in the platform → enable one campaign → compare results → expandTables, processing steps and delivery rules behind the screens in this prototype. A starting point, to be adapted to Redsoft’s architecture.
Suggested tables and the fields that matter. Names are suggestions.
id · e.g. DR-EXO-UK-001affiliate_idname, countrytracking_setup_id (nullable)status draft / active / pausedid · e.g. LINK-GG-01campaign_idtype MTL / VTLref · the link reference in the URL (today ref_ids)destination, route (e.g. srcm=gg)id · e.g. TRACKING-SETUP-1affiliate_id, nameintegration_type custom_s2s / google_browserplatform_presetclick_param (cid), click_macrotracking_setup_idevent_name registration / first_purchase / purchase / package_1…4enabledpostback_url or google_send_toidexternal_click_id (full value, unchanged)campaign_id, campaign_link_idtracking_setup_id (snapshot at click time)visitor_id (cookie), clicked_atattributed_click_idattributed_atid (used as {event_id})user_id, event_nameorder_id, package_tieroccurred_atconversion_event_id, event_rule_ididempotency_key (unique)final_url, status, attemptshttp_status, response_snippetnext_retry_at, is_testWhat happens on each trigger.
click_param and click_macro (from the preset or typed by the affiliate).click_param=click_macro to every MTL/VTL link of the campaign (e.g. cid={conversions_tracking}).ref_ids). This gives the campaign, the link and the tracking setup.click_param (e.g. cid). If it is empty or still the raw macro text, treat it as no click ID.click row and set a first-party cookie with the visitor ID (30 days).attributed_click_id. Never change it later.registration.purchase and package_N.first_purchase.conversion_event.| Sending | Background queue, not inside the signup/payment request. HTTP GET, 10-second timeout, follow at most 3 redirects. |
|---|---|
| Success | Any 2xx answer. |
| Retries | Timeout or 5xx → retry after 1 min, 5 min, 30 min, 2 h, 6 h, then Failed. 4xx → Failed immediately. A manual Retry from the log rebuilds the URL from the current setup, so a fixed setup takes effect. |
| Duplicates | Unique idempotency_key = setup + event + (user ID for once-only events, order ID for purchases). |
| Placeholders | Save the URL exactly as pasted. When validating and sending, treat known platform click markers ({conversions_tracking}, ${SUBID}, REPLACE…) as the click-ID slot (internally {external_click_id}), and leave out parameters whose value is OPTIONAL. Apart from those, only the listed Redsoft placeholders are allowed. Unknown {…} tokens are rejected on save. Values are URL-encoded when filled in. |
| URL safety | Allow only http/https to public hosts. Block localhost, private IP ranges and internal hostnames (protects against SSRF). Check redirect targets the same way. Prefer https and warn on http. |
| Privacy | Never put e-mail, username or other personal data into postbacks. Only the IDs listed on the Redsoft values page. |
| Log retention | Suggest 90 days visible to affiliates. |
| Tests | Use the click ID the affiliate pastes from their own test click. If none is given, use REDSOFT_TEST_<random>. Mark is_test and never count it as a conversion internally. |
Starting values. Each one must be checked against the platform’s current documentation, or with a test conversion, before release. Postbacks are pasted exactly as the platform gives them. Redsoft recognises the platform’s click-ID slot in them (e.g. {conversions_tracking}, ${SUBID}, REPLACE).
| Platform | Type | Click macro on the link |
|---|
To agree in the kickoff meeting.
ref_ids? If its rules differ from 30 days / last click / locked at signup, align them, so postbacks match what the affiliate is paid for.