How to pay international contractors, step by step

A repeatable sequence for engagements where you cannot walk over to someone's desk and look at the work.

This page is the operational companion to the wider guide on cross-border work. It assumes you have found the person or team, agreed a price, and now need a process that survives distance, timezone gaps and a first-time working relationship.

1. Split the engagement before you split the money

Break the work into the smallest units that still deliver something meaningful on their own. Each unit becomes one milestone, and one milestone becomes one transaction. Resist a single "on completion" payment: it concentrates every risk into one irreversible decision.

2. Write conditions in the second person

Write each condition as an instruction the provider could follow and a stranger could check. If you cannot name what will be inspected — a branch, an issue, a document, a URL — the condition is not finished yet.

3. Agree the evidence source in advance

Decide up front where evidence will come from, so nobody argues about admissibility later.

GitHub / GitLab
Merged pull or merge requests, commits, releases on named repositories.
Jira / Linear
Issues transitioning to an agreed done state on a named board, team or project.
Manual evidence
Files, links or written confirmation attached to the specific condition.

4. Let ordering do the risk management

Milestones run in sequence and a later one cannot settle ahead of an earlier one. Neither side needs to negotiate exposure, because the structure caps it at one milestone.

5. Separate the claim from the conclusion

A provider claims completion; that claim is not a verdict. Evidence is retrieved and shown as raw fact, verification returns an outcome per condition, and the decision follows. Keeping those four things visibly distinct is what stops "I sent it" from becoming an argument.

Common questions

Should I ever pay a deposit up front?

If a provider needs commitment before starting, make the first milestone small and give it a condition that can be checked quickly — a kick-off artefact, an environment set up, a plan accepted. That is a milestone, not a deposit.

How do I handle change requests mid-engagement?

New scope belongs in a new milestone with its own conditions rather than an amendment to a live one. Conditions on an accepted milestone should not move under the provider's feet.

What if the contractor uses tools we don't?

Agree the evidence source during setup. Where no integration applies, manual evidence attached to a specific condition is perfectly valid — the requirement is that it is attached to the condition it claims to satisfy.

Run the method on a live engagement

Set the milestones and conditions in one pass, then send the invitation to your counterparty.

Related reading