Dashboard
0
P
| Offer | Model | Payout | GEO |
|---|---|---|---|
| Loading... | |||
| Click ID | Offer | Country | Device | OS | Sub1 | Fraud | Converted | Time |
|---|---|---|---|---|---|---|---|---|
| Loading... | ||||||||
| ID | Offer | Country | Status | Push | Time |
|---|---|---|---|---|---|
| Loading... | |||||
| ID | Click ID | Offer | Status | My Payout | Time |
|---|---|---|---|---|---|
| Loading... | |||||
| Lead ID | Offer | Country | Status | My Payout | Date |
|---|---|---|---|---|---|
| Apply filters and run report | |||||
Crypto only. No minimum withdrawal. Payouts processed within 1β3 business days.
| ID | Amount | Method | Status | TX ID | Requested |
|---|---|---|---|---|---|
| Loading... | |||||
Receive real-time HTTP notifications when lead statuses change
{id} Lead ID
{createdAt} Lead creation date
{offer.id} Offer ID
{offer.name} Offer name
{status} New status value
{statusGroup} Status group label
{reward.amount} Publisher payout
{reward.currency} Currency (USD)
{lead.name} Lead full name
{lead.email} Lead email
{lead.phone} Lead phone
{lead.country} Lead country code
{lead.ip} Lead IP address
{click_id} Click ID
{comment} Status comment
| Actions | ID | Offer | Lead | Request | Response | Error | Attempt | Status | Time |
|---|---|---|---|---|---|---|---|---|---|
| Loading... | |||||||||
Step-by-step guide to earning money on AFFI MATRIX CRM
AFFI MATRIX CRM is a performance network. You send traffic to advertiser offers and earn a commission for every lead or sale that gets approved. You only earn when real results are delivered β there are no payments just for sending clicks.
| Term | Meaning |
|---|---|
| CPL | Cost Per Lead β earn when user submits a form |
| CPA | Cost Per Action β earn when user purchases or deposits |
| Approval Rate (AR) | % of your leads approved by the advertiser. Most important quality metric. |
| EPC | Earnings Per Click β your revenue Γ· your total clicks |
| SubID | Custom label you add to your tracking link to identify campaigns |
| Postback | Server notification we send to your tracker when a conversion is approved |
| Pending Balance | Earnings from leads awaiting advertiser approval β not guaranteed yet |
| Approved Balance | Confirmed earnings you can withdraw |
Shows your personal performance for the selected period (1 day / 7 days / 30 days). All numbers are specific to your account β you cannot see other publishers' data.
| Card | What it means | When it changes |
|---|---|---|
| Approved Balance | Money you can withdraw now | Increases on approved conversions, decreases on payouts or reversals |
| Pending Balance | Unconfirmed earnings from leads not yet approved | Increases on new leads, converts to Approved or disappears on advertiser decision |
| Total Earned | All-time cumulative approved earnings | Only ever increases |
| Total Paid | Total received in completed payout requests | Increases when admin marks a payout as paid |
| Stat | Good range | If low |
|---|---|---|
| Clicks | Depends on volume | Tracking link broken, or offer is paused |
| Leads | 5β20% CR (leads Γ· clicks) | Landing page not converting, or GEO mismatch |
| My EPC | Varies by vertical | Both CR and approval rate are low |
| Approval Rate | Above 50% (60%+ is excellent) | Traffic quality or GEO mismatch |
Go to Browse Offers in the sidebar. You see all active offers available to your account. Offers marked β Exclusive Rate have a custom payout set specifically for you β your rate is shown prominently.
| Field | What to look for |
|---|---|
| Offer Model | CPL = user just submits a form (easiest). CPA = user must buy or deposit (higher payout, harder). |
| Payout | Your commission per approved conversion. β Exclusive Rate badge means the admin set a custom rate just for you β your rate is higher than the default. |
| Real Price | The actual offer price in local currency (e.g. βΉ1,499). Shown on the offer card for reference β it's the value the advertiser charges the end user. |
| Vertical | The niche. Your traffic must be interested in this topic or conversions will be near zero. |
| GEO | Countries where the offer accepts traffic. Sending from other countries = clicks recorded, leads rejected, you earn nothing. |
| Description | Lists traffic restrictions. Read every word before running ads. Violations can get your leads reversed and account reviewed. |
| Your traffic source | Best-fit verticals |
|---|---|
| Facebook / Instagram ads | Finance, Health & Beauty, Dating, eCommerce |
| Google Search ads | Finance, Insurance, Legal β high purchase-intent searches |
| Push notifications | Dating, Sweepstakes, Gaming, Crypto |
| Native ads (Taboola, Outbrain) | Health, Finance, News-angle offers |
| SEO / content site | Whatever your content is about β match verticals to your audience |
| Email list | Finance, Insurance, eCommerce β check offer allows email traffic |
Click Preview β on any offer card to see the advertiser's destination page before promoting it. Check it loads fast, the form is simple, and it renders correctly on mobile.
Go to Tracking Links in the sidebar. This is your unique link that records every click to your account. Never share it with another publisher.
On the Browse Offers page, click π Get Link on any offer card. It auto-generates a link with no SubIDs and navigates you to the Tracking Links tab where you can customise it.
SubIDs are the single most important optimisation tool. Without them you cannot tell which campaigns, ad sets, or creatives are generating your approved conversions β you cannot scale what you cannot measure.
| Parameter | Use for | Example |
|---|---|---|
| sub1 | Traffic source (always fill this in) | fb, google, push_zone1, email_aug |
| sub2 | Campaign name or ID | loan_india_q3, dating_us_retarget |
| sub3 | Ad set or audience | lookalike_1pct, interest_finance, age25_35 |
| sub4 | Creative or ad variant | img_red_v2, video_testimonial, carousel |
| sub5 | Keyword or placement | personal_loan_apply, zone_2847 |
Pass your tracker's click ID in sub1. Your tracker will use this to match conversions when our postback fires back to it.
Go to Reports, run a report for your date range. The conversion table includes sub1βsub5 columns. Sort by sub2 (campaign) and compare:
A postback is a server-to-server request we send to your tracker whenever a conversion is approved. It works even if the user closed their browser days ago, and does not rely on cookies or pixels.
{sub1} in the postback URL β since sub1 is where you pass your tracker's click ID.| Macro | Replaced with | Use case |
|---|---|---|
| {sub1} | Your sub1 value (put tracker click ID here) | Most important β lets tracker match conversion to its click |
| {sub2}β{sub5} | Your other SubID values | Campaign, ad set, creative attribution in your tracker |
| {status} | approved / rejected / reversed | Record rejections and reversals, not just approvals |
| {payout} | Your commission amount (e.g. 12.00) | Record exact revenue for ROI calculation |
| {click_id} | Network's CLK⦠click ID | For network-side debugging |
| {offer_id} | Numeric offer ID | Distinguish conversions when running multiple offers |
Every click through your tracking links is recorded here β one row per visitor. Use it to verify tracking is working after a test click, and to diagnose fraud flags.
| Column | What it tells you |
|---|---|
| Click ID | Unique CLKxxx ID. Provide this to support when investigating a missing conversion. |
| Country | Where the visitor was located. If you see many clicks from countries outside the offer's GEO list, fix your ad targeting. |
| Fraud | Clean = tracked normally. π¨ Fraud = rejected β you earn nothing from this click. |
| Converted | Yes = this click led to an approved conversion (you were paid). |
A lead is created when a user submits the form on the advertiser's page. Every lead goes through fraud checks, then gets pushed to the advertiser for review.
| Status | Meaning | Effect on your balance |
|---|---|---|
| processing | Submitted and sent to advertiser, awaiting decision | Moves to Pending Balance (not guaranteed) |
| approved | Advertiser accepted the lead β you earned | Credited to Approved Balance β |
| cancelled | Advertiser declined β wrong GEO, invalid data, below quality bar | Removed from Pending Balance β |
| wrong_number | Wrong number or customer did not order β granular cancellation reason | Removed from Pending Balance β |
| spam | Blocked by network fraud rules before reaching advertiser | Never credited β |
| duplicate | Same phone/email submitted too recently for this offer | Never credited β |
Every row in the Conversions tab is a confirmed, approved conversion β money in your approved balance. Conversions often appear hours or days after the original click, since advertisers review leads on their own schedule.
| Column | Description |
|---|---|
| Your Payout | The exact amount credited to your approved balance for this conversion |
| Status | approved = confirmed. reversed = advertiser cancelled it, your balance was debited. |
| Sub1βSub5 | Your original campaign tracking values β tells you which campaign generated this conversion |
A reversal happens when an advertiser initially approves a lead but later cancels it β usually because the user requested a refund, committed fraud, or was a duplicate from another source. The amount is automatically deducted from your approved balance. A small reversal rate (under 5%) is normal. High reversal rates signal traffic quality issues.
Build custom date-range reports to calculate ROI, identify best campaigns, and prepare data for scaling decisions.
The donut chart shows which offers contribute the most to your total earnings. Concentrate your best traffic on your highest-contributing offers and cut time spent on low-earners.
Go to Earnings in the sidebar to see your balance breakdown and submit a withdrawal request.
| Status | Meaning |
|---|---|
| pending | Submitted, admin is reviewing. Funds reserved from your balance. |
| paid | Crypto transfer sent. Check your wallet β crypto payments are typically confirmed within minutes to 1 hour. |
| rejected | Request declined β reason provided. Funds returned to your approved balance, resubmit with corrections. |
These rules protect the network and honest publishers. Violations result in removal from offers or account suspension.
| Metric | Healthy | Warning | Danger |
|---|---|---|---|
| Fraud Rate (% of clicks) | < 5% | 5β15% | > 15% |
| Approval Rate (% of leads) | > 50% | 30β50% | < 30% |
| Reversal Rate (% of conversions) | < 5% | 5β10% | > 10% |
Webhooks send real-time HTTP requests to your server whenever a lead status changes (e.g. approved, cancelled, spam). This lets you sync lead data with your tracker, CRM, or notification system automatically.
| Field | Description |
|---|---|
| URI | Your server endpoint URL (must be a valid https:// URL) |
| Content Type | application/json (default) or application/x-www-form-urlencoded |
| Request Method | GET, POST, PUT, or PATCH β choose what your server expects |
| Body Template | JSON template with {variable} placeholders. Replaced with real values at send time. |
| Active | Toggle to enable/disable without deleting the configuration |
| Variable | Example Value | Description |
|---|---|---|
{id} | 12345 | Lead ID |
{createdAt} | 2026-04-05 14:30:00 | Lead creation timestamp |
{offer.id} | 8 | Offer ID |
{offer.name} | Insurance CPL | Offer name |
{status} | approved | New lead status value |
{statusGroup} | accepted | Status group label (accepted/cancelled/spam/processing) |
{reward.amount} | 7.00 | Your payout for this lead |
{reward.currency} | USD | Currency |
{lead.name} | John Smith | Lead full name |
{lead.email} | john@example.com | Lead email |
{lead.phone} | +14155551234 | Lead phone |
{lead.country} | US | Lead country code |
{lead.ip} | 203.0.113.1 | Lead IP address |
{click_id} | CLK7a3f9e001 | Tracking click ID |
{comment} | Payment confirmed | Status change comment (if any) |
{
"lead_id": "{id}",
"offer": "{offer.name}",
"status": "{status}",
"status_group": "{statusGroup}",
"payout": "{reward.amount}",
"currency": "{reward.currency}",
"lead": {
"name": "{lead.name}",
"email": "{lead.email}",
"phone": "{lead.phone}",
"country": "{lead.country}"
},
"click_id": "{click_id}",
"comment": "{comment}",
"created_at": "{createdAt}"
}
For GET requests, if you leave the body template empty, all variables are automatically appended as query parameters:
https://yourserver.com/webhook?id=12345&status=approved&offer.name=Insurance+CPL&reward.amount=7.00&...
Or use a body template with GET to send only specific fields as query params via your URL:
https://yourserver.com/webhook?lid={id}&s={status}&amt={reward.amount}
Technical details for publishers who integrate via API or use third-party trackers.
This URL records a click tied to your account and redirects the user to the advertiser's landing page. The click_id is auto-generated and appended to the landing URL as a query parameter.
| Parameter | Required | Description |
|---|---|---|
| offer_id | Yes | Numeric offer ID (shown on offer card and tracking link generator) |
| pub_id | Yes | Your publisher ID (shown in your profile) |
| sub1βsub5 | No | Custom tracking labels. Pass your tracker's click ID in sub1 for postback matching. |
If you host your own landing page and collect form data, POST the lead directly to the network API:
| Field | Required | Description |
|---|---|---|
| click_id | Yes | The click ID passed to your landing page via the tracking URL redirect. Capture it from the URL query string. |
| name | Recommended | Lead's full name |
| phone | Recommended | Lead's phone with country code |
| No | Lead's email address |
When a conversion is approved, the network fires a GET request to your postback URL with these macros replaced:
| Macro | Replaced With | Example |
|---|---|---|
| {click_id} | Network click ID | CLK1A2B3C4D5E6F |
| {sub1}β{sub5} | Your original SubID values | Your tracker's click ID, campaign name, etc. |
| {status} | Conversion status | approved, rejected, reversed |
| {payout} | Your commission amount | 12.00 |
| {offer_id} | Network offer ID | 5 |
| {publisher_id} | Your publisher ID | 12 |
/api/lead.When the advertiser does not provide a landing page, you host your own. Your landing page collects lead data (name, phone, email) and submits it directly to the CRM lead API with the tracking parameters.
Go to Tracking Links and generate a link for your offer. Use this link as the destination URL in your ads or traffic source. When a user clicks it, the CRM records the click and redirects to the offer's landing_url.
If the offer has no landing URL configured (advertiser has no page), ask the admin to set the offer's landing URL to your own landing page URL, for example:
The CRM replaces {click_id}, {offer_id}, and {publisher_id} with real values before redirecting.
Your landing page must extract click_id, offer_id, and publisher_id from the URL query string and include them when submitting the lead.
When the user fills in and submits your form, POST the data to the CRM lead endpoint:
To track which ad or campaign generated each lead, pass SubIDs in your tracking link and forward them through your landing page:
A minimal working landing page. Copy it, change NETWORK_DOMAIN to your CRM URL, and customise the design:
click_id in the URL. Fill in the form and submit. Check the Leads tab β the lead should appear within seconds. If not, open browser DevTools β Network tab and look for errors on the /api/lead POST request.The offer is likely paused or the daily cap was reached. Go to Browse Offers β if the offer isn't listed as Active, it is unavailable.
Check: (1) Are most clicks fraud-flagged? (2) Does your traffic GEO match the offer? (3) Test the link manually β is the destination page working? (4) Is the offer still active?
Normal for some advertisers. Most resolve within 24β48 hours. If leads stay processing over 7 days, contact the admin.
The admin set a custom payout just for your account on that offer. Your rate is higher than the default shown to other publishers.
Check: (1) Are you passing your tracker's click ID in sub1? (2) Is your postback URL saved correctly? (3) Check your tracker's incoming postback logs. (4) Is your tracker URL using HTTPS?
The reason is shown in your notification. Common: incorrect wallet address or wrong network. Funds return to your balance β fix and resubmit.