PSA billing sync lets DMARCER send the current number of domains you manage for each customer straight onto a line on that customer's contract in your PSA, so your recurring billing stays accurate without anyone updating quantities by hand. It is one part of the wider PSA integration (alongside customer links, asset sync and alerts), and it builds on the customer links you have already set up.
What it does
Once enabled, DMARCER checks your billing rules in the background, roughly once an hour. For each linked customer it works out the current domain count, then writes that quantity to the contract line you chose. You can bill on the total count, or split it between Standard and Parked domains. Every attempt is recorded, so you always have a clear history of what was sent, when, and why.
Two things need to be in place first. PSA integration is included on some plans: if you cannot see these billing options, your plan may not include it yet, so get in touch and we will help. You also need the customer already linked to its PSA client under Manage customer links, because without a customer link there is nothing for a billing rule to attach to.
Turning on billing for the integration
Open Integrations, find your PSA integration and click Configure, then go to the Billing tab. The settings here apply across the whole integration:
- Align billing: the main switch. Tick it to send the current domain count onto each customer's chosen contract line.
- Cadence: choose how often to send updates. Pick Daily (every day) or Monthly (on a chosen day of the month). If a monthly date is missed, for example because of downtime or a holiday, DMARCER catches up at the next check.
- Day of month: only shown for Monthly. Pick a day from 1 to 28 (it stops at 28 so the date always exists, even in February).
- Default bill / don't bill: whether new rules send a quantity, or instead record the customer as Skipped and send nothing. Each rule can override this.
- Default granularity: Aggregate (one combined quantity per rule) or Per-asset (one line per linked domain). This is a default that each customer can override.
Click Save configuration to store these settings. The lower part of the tab shows a Customer billing table listing each linked customer, their rates, status and any warnings; use Reload to refresh it.
Choosing how to bill each customer
In Manage customer links, click the receipt (Billing) button on a customer row to open the per-customer billing rules. The first choice is the approach, asking how you want to bill this customer:
- Combined - Total: all domains counted onto a single contract line. You pick a Contract, then a Line, and can Create new line on this contract if one does not exist yet.
- Combined - Per-Kind: the count is split across two lines, one for Standard domains and one for Parked domains. You can enable either or both.
- Separated: DMARCER manages one contract line per domain. You set a Line name format using the tokens {DomainName} and {Kind} (which becomes Standard or Parked), plus a Rate per line. A line is created for each linked domain when DMARCER next runs.
- Per-Asset: links each synced asset directly to the contract using the PSA's own per-asset billing, with a Charge per asset. This only appears for PSAs that support it (HALO) and needs asset sync turned on for the integration.
- Don't bill: skip this customer entirely. DMARCER records them as Skipped and sends nothing.
Each rule also has a Mode of Inherit, Bill or Don't bill, so you can either follow the integration default or set a specific behaviour for that line. When you are done, click Save. To send a quantity straight away without waiting for the schedule, use Push now on a rule. Per-Asset rules also offer Reset cache, which makes the next update re-check every asset against the PSA.
What the counts mean
A customer can have separate rules for three counts: Total, Standard and Parked. Standard counts the active domains you manage; Parked counts domains held in a parked state; Total is the two added together. The quantity sent is worked out the same way the License Usage page shows it, counting every live domain at the moment of the update, so the contract line matches what you see in DMARCER.
Pricing: who owns the rate
For HALO, DMARCER can send the per-line rate as well as the quantity, so the Rate per line you set is applied each time. For PSAs that handle pricing themselves (such as Autotask), DMARCER sends the quantity only, and the rate fields are replaced with a note that pricing is managed in your PSA. In Separated mode, PSAs that need it will show a Service or catalogue-item picker, and a Use the PSA's catalog price option that tells DMARCER to leave the rate alone and let the catalogue price decide invoicing.
Common pitfalls
- Every update overwrites the chosen line. If someone edits the quantity in the PSA mid-cycle, it will be replaced at the next check. To stop billing a line, set the rule to Don't bill rather than editing the PSA.
- No contracts found: the customer has no contract in the PSA. Create one on the customer's Contracts tab in your PSA, then click Reload in the rule editor.
- A line marked as do-not-invoice in the PSA is skipped quietly, and the skip is recorded against that update, so a line that never changes may simply be marked that way in the PSA.
- Combined rules need a chosen line. If you pick Combined but never select a line, the update is recorded as Failed, with a reason asking you to reopen the window and pick a line.
- Per-Asset is HALO only and needs asset sync to be running first; otherwise it stays hidden or greyed out.
- To save time, an unchanged Combined quantity is remembered and skipped, but DMARCER still re-checks at least weekly so any differences in the PSA get put right.
- A failed update does not stop a retry: DMARCER tries again at the next check. Successful updates and deliberate skips both count as having handled the current billing period.
If an update goes wrong, check the Warnings column in the Customer billing table and the Last push status on the rule. Each entry shows the reason (for example a quantity change, a skip, or a connection error), so you can see exactly what happened on the last run.