# Troubleshooting

> Fixes for common problems with domains, offer links, postbacks, stats and costs.

This page lists the problems people run into most often, with the fix for each one.

---

## My domain is stuck on Pending Verification

A domain stays on **Pending Verification** until Proferex finds its DNS records. Check these in order:

1. Click the **DNS** button next to the domain and compare every record with what you saved at your DNS provider. Names and values must match exactly, with no extra spaces.
2. Some providers add your domain to the end of the name field automatically. If yours does, enter only the first part of the name.
3. Add the CNAME record first. Some TXT records only appear in the DNS panel after the CNAME is in place, so open the panel again after saving the CNAME.
4. If your provider has a "publish" or "pending changes" button, make sure the changes were published.
5. Click **Retry & Check**.

DNS changes usually spread in a few minutes, but can take a few hours. If you are on a root domain and your provider will not accept a CNAME, use a subdomain such as `track.mydomain.com` instead.

See [Tracking Domain](/docs/tracker/tracking-domain/index.md) and [Page Domain](/docs/landing-pages/page-domain/index.md) for the full setup.

---

## My offer link returns a 404 on my page domain

Your offer link is probably relative, such as `href="/outgoing"`. On a Published Page, a relative link points at your page domain. The `/outgoing` link only works on your tracking domain.

Use the full URL with your tracking domain:

```html
<a href="https://track.mydomain.com/outgoing">Get The Offer</a>
```

See [Offer Redirect](/docs/tracker/offer-redirect/index.md).

---

## My campaign and offer link use different tracking domains

When your campaign URL runs on one tracking domain and your `/outgoing` link points at another, Published Pages and Blog landers still track on their own. An External Hosted lander needs `tracker.js` added to its page:

```html
<script defer src="https://track.mydomain.com/proferex/tracker.js"></script>
```

The script works in the `<head>` or the `<body>`, and through Google Tag Manager. Your outgoing links stay as they are. The simpler fix is to use the same tracking domain for both. See [Offer Redirect](/docs/tracker/offer-redirect/index.md) to check whether your lander type needs the script.

---

## Visitors without a click land on an unexpected page

When `/outgoing` cannot identify the visitor, Proferex sends them to your **Fallback Campaign**. If no Fallback Campaign is set, the visitor sees a not found page. Choose a Fallback Campaign under **Tracker → Tracker Settings** so stray traffic still reaches an offer and is tracked.

---

## A postback is not recording conversions

Go to **Tracker → Tracker Settings → Click/Conversion Log** and choose **Conversions**. Every conversion Proferex records is listed there, straight away.

If the conversion isn't there, test your postback URL in your browser with a real click ID. See [Test a postback](/docs/tracker/postbacks/index.md#test-a-postback). The message it shows tells you what's wrong.

- **`Invalid click ID`.** Your offer source isn't sending back the click ID it received. Check that your Offer URL sends `{clickid}`, and that your offer source's postback maps the same sub ID to `clickid`.
- **`Conversion already processed for this click`.** This click already has a conversion. Send the offer source's transaction ID in `tid`, so each sale is recorded.
- **`{"success":true}`, but your offer source's own postbacks never arrive.** Check that the postback URL saved at your offer source is the one Proferex gave you, on a working tracking domain.

Offer sources can also send postbacks late, or hold them for review. See [Postbacks](/docs/tracker/postbacks/index.md).

---

## My stats are not showing yet

Stats appear within a minute of a visit, click or conversion. They are not real time. Wait a minute, then refresh.

If they still do not appear, check the **Date Range** and **Timezone** in the **Controls** panel. A timezone far from your own can push today's traffic outside the selected range. On the Analytics screen, click **Apply Filters** after changing them. See [Reading Your Stats](/docs/reports/reading-your-stats/index.md).

---

## My costs are missing

Check how the campaign gets its cost:

- **Cost sync.** Synced costs only reach visits that carry the traffic source's campaign ID. Check that **Campaign ID Token** is set on the traffic source, and that your ads use the campaign URL exactly as Proferex gives it. Today's synced cost keeps updating every 15 minutes.
- **Cost in the campaign URL.** Check that the traffic source's **Cost (CPC)** row has the right cost macro, and that the campaign uses the **CPC** cost model.
- **Static cost.** Check the **Static CPC** or **Static CPA** in the campaign's cost settings. A change only applies to new visits.
- **CPM.** A campaign with the **CPM** cost model only gets synced cost. Without cost sync, its cost is zero.

See [Costs](/docs/tracker/costs/index.md).

---

## My numbers differ from my network or traffic source

The two most common causes are timezone and currency.

- **Timezone.** Set the **Timezone** in the **Controls** panel to the timezone the other platform reports in. Many affiliate networks use New York time and many traffic sources use UTC.
- **Currency.** Proferex shows money in your display currency, converted at the exchange rate for each day. Compare conversion counts first, or compare in the same currency.

Compare finished days, not today. See [Why Numbers Differ](/docs/reports/why-numbers-differ/index.md) for the full list of causes.

---

## Still stuck

If none of these match your problem, [contact us](/docs/appendix/contact/index.md). Tell us the campaign name and the time of the visit, so we can find it quickly.
