Product conceptDarkRoseDating demo · No live tracking requests are sent · All IDs are example values
RedsoftManagement Solutions
DRAffiliate
DarkRoseDating marketing

Campaigns & campaign links

Create a campaign, add its MTL and VTL links, then attach tracking once for the whole campaign.

One assigned tracking setup covers every campaign link

Every MTL and VTL link below uses the same saved click-ID mapping and event destinations.

1. Campaign→2. Add MTL/VTL links→3. Attach postbacks once

Your campaigns

Select a campaign to manage its links and conversion tracking.

CampaignTraffic sourceCountryCampaign linksTracking
ExoClick · UK Golden GlamDR-EXO-UK-001ExoClickUnited Kingdom1 MTL · 3 VTL2 events active
EvaDav · AU ModelsDR-BEMOB-AU-002EvaDav, tracked through BeMobAustralia1 MTL · 4 VTL3 events active
Google Search · UKDR-GADS-UK-003Google AdsUnited Kingdom1 MTLDraft
Selected campaign

ExoClick · UK Golden Glam

Campaign ID: DR-EXO-UK-001 · DarkRoseDating · United Kingdom

Active
Traffic sourceExoClickDirect S2S · preset “ExoClick”
Incoming click parametercidReceives ExoClick’s {conversions_tracking}
Saved by Redsoft asexternal_click_idKept 30 days · last click wins · locked at signup
Campaign-wide eventsRegistration + First purchaseApplied to all 4 links
1

Campaign links

These links can point to different models. Tracking does not need to be configured again for each link.

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.

2

Assigned tracking setup

This campaign uses the tracking setup below. Its saved event rules apply to every campaign link.

RRegistration

Fires once, when the signup is completed.

http://s.magsrv.com/tag.php?goal=e43b3ba9187ce9d08b25f2a51f33b876&tag={external_click_id}
1First purchase

Fires once per user, on their first successful payment.

http://s.magsrv.com/tag.php?goal=10151cea167cf2cc1156ca7a033a9fa7&tag={external_click_id}
What happens: a visitor opens any link above → ExoClick inserts its click ID → Redsoft stores the click and the assigned tracking setup → at signup the click is locked to the new user → registration or purchase fires that setup’s matching postback → the result appears in the .
Marketing

Tracking setups

Manage the click-ID mapping and conversion rules attached to each DarkRoseDating campaign.

The assigned tracking setup selects the correct rule

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.

Campaign link→Assigned setup→Event postback
EX

ExoClick · UK Golden Glam

Custom S2S · DR-EXO-UK-001

Active
Campaign links
4
Events
Registration, First purchase
BM

BeMob tracker · AU Models

Custom S2S · DR-BEMOB-AU-002

Active
Campaign links
5
Events
Registration, First + Every purchase
G

Google Search · UK

Google Ads browser event · DR-GADS-UK-003

Draft
Campaign links
1
Events
First purchase
Campaign tracking

ExoClick · UK Golden Glam

Direct ExoClick S2S goals for every link in campaign DR-EXO-UK-001.

Saved
1

Where does your traffic come from?

Choose a platform preset. Redsoft fills in the click-ID parameter, the platform’s click macro and a postback template for each event.

Example campaign link

Redsoft adds the parameter automatically to every MTL and VTL link.

Example URL
https://www.darkrosedating.com/lp005/?ref_ids=lpWWpJalmqacmpeon6CSlKeiYZJk&srcm=gg&cid={conversions_tracking}

2

Attribution rules

The same for every affiliate and campaign. Shown here so the affiliate knows exactly how conversions are credited.

Set by Redsoft
30 daysClick window

A click can earn a signup for 30 days after it happened. Older clicks are ignored.

Last clickCredit model

If a visitor clicked several affiliate links before signing up, the most recent click gets the credit.

Locked at signupUser ownership

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.

3

Conversion events

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.

Stage 1 · New campaignRegistration

Buyers are rare at first. Signups give your network enough data to find which zones work.

→
Stage 2 · Enough signupsFirst purchase

Move bidding to zones that produce real buyers.

→
Stage 3 · ScalingEvery purchase · Packages

Bid more on zones that bring repeat or high-value buyers.

Package events AdvancedFor affiliates who bid on bigger buyers. Off by default.
⚠ Read before turning these on. A package event fires in addition to First purchase and Every purchase. One payment for Package 3 can therefore send up to three postbacks: First purchase, Every purchase and Package 3. That is correct only if each one goes to a different goal in your network, and you optimise your bids on one goal at a time.

Using a tracker (BeMob, Voluum, RedTrack…)? You often don’t need package events at all. Add {package_tier} to your purchase postback and split the report by package inside your tracker. No extra conversions are counted.
4

Test before going live

“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.

Delivery history

Postback log

Every postback Redsoft sent, skipped or retried, with the exact URL and the platform’s answer.

The first place to look when numbers don’t match

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.

Event→Postback→Platform answer

Deliveries

Click a row to see the full request and response.

TimeEventCampaign · linkClick IDStatusAnswerTries

What each status means

Plain-language explanation shown to affiliates.

Delivered

The platform answered with a success code (2xx). The conversion should appear in its report.

Retrying

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.

Failed

All retries used, or the platform rejected the URL (4xx). Usually a wrong goal ID or key. Fix the setup and press Retry.

Skipped · no click ID

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.

Skipped · duplicate

The same conversion was already delivered, for example after a page reload or a repeated payment notice. Sending it again would double-count.

Test

Sent with the “Send test” button using a test click ID. Not a real conversion.

Walkthrough

Life of one visitor

One example visitor, from the ad click to the last purchase. Press play, or step through it at your own pace.

    EXExoClickAd network the affiliate buys traffic from
    DRDarkRoseDatingThe website the visitor sees
    RSRedsoft backendStores clicks, sends postbacks

    Developers build
    Technical reference

    Redsoft values & naming

    A single internal language that works with ExoClick, BeMob, Voluum, RedTrack and custom postbacks.

    External platforms use different names; Redsoft stores one standard value

    For example, ExoClick’s {conversions_tracking} and PropellerAds’ ${SUBID} both become external_click_id inside Redsoft.

    Platform token→Redsoft value→Postback parameter

    Available postback placeholders

    Affiliates use these controlled names inside saved postback URLs. Anything else in curly brackets is rejected when saving.

    Redsoft placeholderWhat Redsoft insertsExample valueTypical use
    {external_click_id}RequiredThe complete click identifier captured from the campaign linkEXAMPLE_CLICK_IDReal IDs are longer. Always send the full value.ExoClick tag, BeMob cid, PropellerAds visitor_id
    {event_id}Unique Redsoft ID for this conversionEVT-501Tracker transaction ID / deduplication
    {order_id}Unique DarkRoseDating payment order ID (purchase events only)ORDER-1001Purchase transaction ID
    {event_name}The Redsoft event that occurredregistration, first_purchase, purchase, package_3Trackers that take an event-type parameter
    {package_tier}The purchased coin package (purchase events only)package_3Split purchases by package in a tracker without extra goals
    {payout}LaterConversion value—Not part of version 1
    {currency}LaterThree-letter currency code—Not part of version 1 (only needed with payout)

    Event names

    The fixed list of moments Redsoft can report. One payment can trigger more than one event (see the ⚠ notes).

    EventFires whenHow often per userFires together with
    registrationSignup completedOnce—
    first_purchaseFirst successful paymentOnce⚠ purchase and the matching package event
    purchase (Every purchase)Any successful paymentEvery payment⚠ first_purchase (on the first one) and the package event
    package_1 … package_4That coin package was boughtEvery time it is bought⚠ purchase, and first_purchase if it was the first

    ExoClick registration example

    1. ExoClick replaces its token...?cid={conversions_tracking}
    →
    2. Redsoft stores the complete valueexternal_click_id = EXAMPLE_CLICK_ID
    →
    3. Redsoft replaces its placeholder...&tag=EXAMPLE_CLICK_ID

    EXAMPLE_CLICK_ID is a stand-in, not a real ExoClick ID. Production must store and return the complete value supplied by the platform, unchanged.

    Developer handover

    Suggested implementation guide

    One possible way to build the concept shown in this prototype. Technical details are in the .

    Working proposal, not a fixed specification

    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.

    Campaign + links→Assigned setup→Stored click→Locked at signup→Verified event→Postback + log
    1Separate campaigns from tracking setupsWhat these two records mean and why they are separate

    What to do

    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.

    How it works

    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.

    Why this is needed

    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_rule
    2Create a campaign and its linksCampaign ID, link ID, destination and model selection

    What to do

    Let 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.

    How it works

    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.

    Why this is needed

    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.

    3Capture the incoming click ID with platform presetsHow differently named platform macros become one Redsoft field

    What to do

    Offer a list of platform presets (ExoClick, TrafficStars, PropellerAds, EvaDav, BeMob, Voluum, RedTrack, Binom, Keitaro) plus “Custom”. Each preset fills in the URL parameter, the platform’s click macro and a postback template. Custom lets the affiliate type both.

    How it works

    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.

    Why this is needed

    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_id
    4Store the click and apply attribution rules30-day window, last click, locked to the user at signup

    What to do

    On 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.

    How it works

    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.

    Why this is needed

    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.

    Example: user record after signupuser_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:02
    5Use verified Redsoft eventsThe trigger everything else depends on, and how events overlap

    What to do

    Define 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.

    How it works

    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.

    Why this is needed

    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_4
    6Deliver a Custom S2S postbackHow this replaces the current one-off custom-code approach

    What the affiliate does once

    Picks a preset, turns on an event such as Registration and pastes the postback URL from the platform (or fills in the goal ID in the template). The URL marks where Redsoft inserts the click ID with {external_click_id}.

    What the backend does later

    After Redsoft confirms the registration, it takes the saved URL, replaces {external_click_id} with the complete stored value (URL-encoded), sends the request, and writes the result to the postback log. Purchase events work the same way with their own URLs.

    Why this is needed

    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).

    Who replaces which valueCampaign click: ExoClick replaces {conversions_tracking}   |   Conversion delivery: Redsoft replaces {external_click_id} with the complete stored click ID
    7Trigger a Google Ads browser eventHow several package conversions can work on the same page

    What to do

    Load 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.

    How it works

    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).

    Why this is needed

    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.

    Browser-event flowPackage 2 confirmed → select Package 2 send_to → fire one Google conversion event
    8Handle missing IDs, failures and duplicatesIdempotency keys and automatic retries

    What to do

    Always 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.

    How it works

    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.

    Why this is needed

    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 failures
    9Show every delivery in the postback logSelf-service troubleshooting for affiliates

    What to do

    Write 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.

    How it works

    Statuses: Delivered, Retrying, Failed, Skipped · no click ID, Skipped · duplicate, Test. A failed row has a Retry button after the affiliate fixes the setup.

    Why this is needed

    When an affiliate says “ExoClick shows fewer conversions than you”, the log answers it in seconds. Without it, every question becomes a developer ticket.

    10Send test postbacks before going liveA safe rollout

    What to do

    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.

    How it works

    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.

    Why this is needed

    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.

    Suggested rolloutcheck URLs → send test → see it arrive in the platform → enable one campaign → compare results → expand
    Developer handover

    Developer spec

    Tables, processing steps and delivery rules behind the screens in this prototype. A starting point, to be adapted to Redsoft’s architecture.

    1. Data model

    Suggested tables and the fields that matter. Names are suggestions.

    campaign

    • id · e.g. DR-EXO-UK-001
    • affiliate_id
    • name, country
    • tracking_setup_id (nullable)
    • status draft / active / paused

    campaign_link

    • id · e.g. LINK-GG-01
    • campaign_id
    • type MTL / VTL
    • ref · the link reference in the URL (today ref_ids)
    • destination, route (e.g. srcm=gg)
    • generated URL (with click parameter)

    tracking_setup

    • id · e.g. TRACKING-SETUP-1
    • affiliate_id, name
    • integration_type custom_s2s / google_browser
    • platform_preset
    • click_param (cid), click_macro

    event_rule

    • tracking_setup_id
    • event_name registration / first_purchase / purchase / package_1…4
    • enabled
    • postback_url or google_send_to

    click

    • id
    • external_click_id (full value, unchanged)
    • campaign_id, campaign_link_id
    • tracking_setup_id (snapshot at click time)
    • visitor_id (cookie), clicked_at

    user (new fields)

    • attributed_click_id
    • attributed_at
    • set once at signup, never overwritten

    conversion_event

    • id (used as {event_id})
    • user_id, event_name
    • order_id, package_tier
    • occurred_at

    postback_delivery

    • conversion_event_id, event_rule_id
    • idempotency_key (unique)
    • final_url, status, attempts
    • http_status, response_snippet
    • next_retry_at, is_test

    2. Processing steps

    What happens on each trigger.

    When a setup is assigned to a campaign

    1. Read the setup’s click_param and click_macro (from the preset or typed by the affiliate).
    2. Add click_param=click_macro to every MTL/VTL link of the campaign (e.g. cid={conversions_tracking}).
    3. Regenerate the links when the setup or its preset changes, and when a new link is added.

    On landing (any campaign link)

    1. Identify the campaign link from its reference (today ref_ids). This gives the campaign, the link and the tracking setup.
    2. Read that setup’s click_param (e.g. cid). If it is empty or still the raw macro text, treat it as no click ID.
    3. Insert a click row and set a first-party cookie with the visitor ID (30 days).
    4. Do this before any redirect, and keep the value exactly as received.

    On signup

    1. Find the visitor’s clicks from the last 30 days.
    2. Pick the newest (last click).
    3. Save it on the user as attributed_click_id. Never change it later.
    4. Raise registration.

    On confirmed payment

    1. Raise purchase and package_N.
    2. If it is the user’s first successful payment, also raise first_purchase.
    3. Only from the verified payment result, never from the browser.

    For each raised event

    1. Store conversion_event.
    2. No attributed click → log “Skipped · no click ID”.
    3. Load the setup’s rule for this event. Not enabled → stop.
    4. Build the key. Already delivered → log “Skipped · duplicate”.
    5. Fill the placeholders (URL-encoded), queue the request.

    3. Delivery & security rules

    SendingBackground queue, not inside the signup/payment request. HTTP GET, 10-second timeout, follow at most 3 redirects.
    SuccessAny 2xx answer.
    RetriesTimeout 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.
    DuplicatesUnique idempotency_key = setup + event + (user ID for once-only events, order ID for purchases).
    PlaceholdersOnly the listed Redsoft placeholders are allowed. Unknown {…} tokens are rejected on save. Values are URL-encoded when filled in.
    URL safetyAllow 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.
    PrivacyNever put e-mail, username or other personal data into postbacks. Only the IDs listed on the Redsoft values page.
    Log retentionSuggest 90 days visible to affiliates.
    TestsUse 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.

    4. Platform presets

    Starting values. Each one must be checked against the platform’s current documentation, or with a test conversion, before release. Words in CAPITALS are filled in by the affiliate.

    PlatformTypeClick macro on the linkPostback template (Redsoft side)

    5. Open questions for the developers

    To agree in the kickoff meeting.

    1. How is a payment confirmed today (payment-provider callback, polling)? How quickly? This decides when purchase postbacks and Google events fire.
    2. Where can the landing request reliably capture the click parameter, before any redirects or caching?
    3. Does the existing affiliate commission system already credit signups through 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.
    4. Is there an existing queue/worker system to use for sending and retries?
    5. How do we identify a visitor before signup (cookie name, lifetime, consent rules)?
    6. Where should the Google browser event fire when the visitor has already left the payment page?
    7. Who verifies the platform presets, and how often are they reviewed?
    DarkRoseDating

    Create campaign

    After creating the campaign, add any number of MTL/VTL links and attach one tracking setup to the campaign.