---
referrals: 3
kind: program
payer: domain:acme.example
code: acme_finder
category: bizdev
status: open
at: 2026-10-30T00:00:00Z
---
# Acme finder's fee

Rates, amounts and names in this file are placeholders, not recommendations or market rates. Each party sets its own terms.

In plain words: someone makes an introduction, and the payer accepts it in writing. If that deal is won within 18 months, the finder earns 3% of first-year value, once.

Ask a lawyer about: whether a finder needs a broker's or agent's license for this kind of deal, whether the buyer has to be told about the fee, and whether referral pay is restricted in the buyer's field. Paying someone who works for the buyer, advises it or holds public office can be bribery, and telling the employer may not cure it. A check here says nothing about any of that.

Change first: `payer`, `code`, the rate and the months.

## Rules

### finder_fee

- on: deal_won
- basis: percent
- rate: 3%
- of: first_year
- once_per: deal

## Attribution

- model: last_touch
- allowed_kinds: intro
- requires_acceptance: intro
- window_months_by_kind.intro: 18
- match: token, deal

## Settlement

- holdback_days: 30
- clawback_days: 90
- cycle: on_demand
- payout_asset: USD
- rails: wire

## Conduct

- pays_customer_staff: false

## Example

Made-up lines. Two introductions, both accepted. The first deal is won in seven months. The second takes 19, so its tail has run out.

To run it, save this file as `REFERRALS.md` and these lines as `referrals.jsonl`, then run `node referrals.mjs run REFERRALS.md referrals.jsonl --as-of 2028-08-01T00:00:00Z`.

As of: 2028-08-01T00:00:00Z

```jsonl
{"type":"agreement","code":"finder","partner":"domain:finder.example"}
{"type":"touch","at":"2026-11-10T09:00:00Z","token":"rf1.acme_finder.finder.intro1.toa3o0.dhb.n.-","kind":"intro","deal":"opp_a1","by":"domain:acme.example"}
{"type":"event","at":"2026-11-11T09:00:00Z","kind":"deal_accepted","source":"crm:accept_a1","deal":"opp_a1","touch":"tc_42e0c1c9b5f922afb589cb5d"}
{"type":"event","at":"2027-06-01T09:00:00Z","kind":"deal_won","source":"crm:won_a1","deal":"opp_a1","asset":"USD","contract":{"first_year":"400000.00"}}
{"type":"touch","at":"2026-11-12T09:00:00Z","token":"rf1.acme_finder.finder.intro2.todt00.dhb.n.-","kind":"intro","deal":"opp_b2","by":"domain:acme.example"}
{"type":"event","at":"2026-11-13T09:00:00Z","kind":"deal_accepted","source":"crm:accept_b2","deal":"opp_b2","touch":"tc_853a38715c7a161cb5c21342"}
{"type":"event","at":"2028-06-15T09:00:00Z","kind":"deal_won","source":"crm:won_b2","deal":"opp_b2","asset":"USD","contract":{"first_year":"400000.00"}}
```

## Worked result

Computed by `run_ledger` as of 2028-08-01T00:00:00Z, on the made-up lines above. Computed amounts are arithmetic on the records and terms you sent. They do not say what anyone owes. Your contract decides that.

| Event | Who | Working | Computed | Note |
|---|---|---|---|---|
| deal_accepted, 2026-11-11 |  | Recorded. No rule fires on this kind of event |  |  |
| deal_accepted, 2026-11-13 |  | Recorded. No rule fires on this kind of event |  |  |
| deal_won, 2027-06-01 | finder | 3% of 400000.00 | 12000.00 |  |
| deal_won, 2028-06-15 | finder | The touch is older than the program's window. | 0.00 | X02 |

| Payee | Asset | Earned | Reversed | Net | Held | Payable |
|---|---|---|---|---|---|---|
| finder | USD | 12000.00 | 0.00 | 12000.00 | 0.00 | 12000.00 |


## Why these settings

`requires_acceptance` gives the intro a date the payer wrote, since a finder's own date could be anything, and calendar months make "18 months" mean what the contract says.
