Integration · Finance
How to build a vendor master sync
The same supplier exists three times under slightly different names and one of them has bank details nobody verified. The shape of a clean vendor master, the prompts that build it, and the production detail that decides whether it holds.
Built with Tray Headless
- System Onboarding form
- Step Duplicate check
- Step Verify identity
- Step Bank change: out of band
- System NetSuite
Bank detail changes always verify out of band, because that request is the most common invoice fraud there is.
The short answer
What is a vendor master sync?
There are four parts to a vendor master sync: one record per legal entity instead of per relationship, duplicate detection at onboarding instead of cleanup afterwards, verification of bank details out of band every time they change, and a single record propagated to every system that pays or orders. Teams usually come unstuck on bank detail changes. A request to update payment details is the most common invoice fraud there is, and treating it as a routine data change is how a company pays a stranger.
What matters here
- Verify every bank detail change out of band, by calling a number you already held. This is the highest-value control in the whole workflow.
- Detect duplicates at onboarding, not in a cleanup project. A duplicate supplier is how the same invoice gets paid twice.
- Key on the legal entity, not the trading name. One company can trade under four names and still be one payee.
- Screen against sanctions and match tax registration before the first payment, not before the first order.
- Report vendors with no spend in a year. A dormant vendor with live bank details is an attack surface.
Who this is for
You run finance systems or procurement operations. Suppliers are created ad hoc, the master has duplicates nobody has time to merge, and bank details are updated by email.
How it works in practice
What happens between needing a new supplier and being able to pay them safely.
- 1
Onboarding is one route with the fields payment needs
Legal name, registration number, tax id, address and remittance details.
- 2
Duplicates are checked before anything is created
On registration number, tax id and normalised name, because cleanup afterwards never happens.
- 3
Identity and compliance are checked before first payment
Registry match, tax validation and sanctions screening.
- 4
Bank details are verified out of band, always
A call to a number already on file, never a number supplied in the request.
- 5
One record propagates to every system
Procurement, ERP and payments read the same vendor rather than each holding their own.
- 6
Changes to payment details are treated as events
Re-verified, recorded, and notified, never applied as a routine field update.
What a vendor master is made of
Four pieces, and the third is a fraud control rather than a data one.
One record per legal entity
Keyed on registration number where one exists. Trading names, divisions and purchase orders all attach to it instead of creating their own.
Duplicate detection at onboarding
Before creation, on registration number, tax id and normalised name. Nobody has ever completed the cleanup project.
Out-of-band bank verification
Every change, verified by calling a number already held. This single control prevents the most common invoice fraud there is.
Single propagation
Procurement, ERP and payments read one record. Three masters means three sets of bank details and one of them is wrong.
The Tray Headless prompts
Paste these into Claude Code or Codex with the Tray Headless plugin installed. Each stage runs on its own. The systems named in them are the worked example rather than a requirement, and every prompt says so.
Once per project, run
/tray-workflows:set-workspace
to pick the workspace these build in. Point it at a sandbox first.
- 1
First, find every place a vendor exists
There are usually more masters than anybody admits.
Headless skills
build-workflowUse build-workflow. The systems in play are NetSuite and Coupa, or whatever we run in those seats. I need the vendor record in each: which fields exist, which are mandatory, where bank details live and who can change them, and how each system identifies a vendor. Then tell me how many vendors exist in each and how much they overlap. There are usually more masters than anybody admits, and each extra one is another place bank details can be wrong.
- 2
Onboard once, and check for duplicates first
Because the cleanup project never happens.
Headless skills
build-workflowUse build-workflow. One onboarding route, asking for what payment actually needs: legal entity name, company registration number, tax registration, registered address, remittance address, contact, and payment terms. Before creating anything, check for duplicates: Exact on company registration number, which is definitive Exact on tax registration Normalised legal name plus country, with legal suffixes stripped Bank account number, which catches a supplier onboarded twice under different names Above a confidence threshold, block and show the existing vendor. Between thresholds, route to a person. Key the master on the legal entity. One company trading under four names is one payee, and treating each name as a vendor is how the same invoice gets paid twice.
- 3
Verify identity and compliance before the first payment
Before payment, not before the first order.
Before a vendor can be paid, not merely created: Validate the registration number against the company registry where an API exists Validate the tax registration format and check it where possible Screen the entity and its known officers against sanctions lists Check whether the vendor is already an employee, by matching bank details and addresses against payroll, which catches a specific and recurring fraud Record every check with its result and date. A vendor that passed screening two years ago has not been screened, and re-screening on a schedule is the difference between a control and a formality.
- 4
Treat a bank detail change as an event, never a field update
This is the highest-value control in the workflow.
Headless skills
tray-gotchasUse tray-gotchas, then handle bank detail changes as their own process: Never apply a change from an email or an attachment Verify by calling a number already held on the vendor record, never a number supplied in the request Require a second approver Notify the previous contact on file that details were changed Hold all payments to that vendor for a short period after any change Record who requested, who verified, who approved, and how A request to change payment details is the most common invoice fraud there is, and it usually arrives as a plausible email from a real supplier domain during a busy week. Every one of those steps exists because a company somewhere skipped it.
- 5
Propagate one record, and prune the dormant ones
A dormant vendor with live bank details is an attack surface.
Headless skills
tray-patternsPropagate the vendor to every system that orders or pays, with the master id carried on each, so a reconciliation compares records instead of names. Reconcile nightly: vendors in one system and not another, bank details that differ between systems, and any vendor created directly in a downstream system bypassing onboarding. That last one should be zero and rarely is. Then report: duplicates prevented at onboarding, bank changes and how each was verified, vendors with no spend in twelve months, and vendors that failed re-screening. Deactivate the dormant ones. A vendor nobody pays, with live bank details and no owner watching it, is an attack surface rather than a record.
- 6
Validate, then hand the controls to finance
Because verification thresholds are a finance policy.
Run the per-step schema checks and the whole-workflow audit before this touches production. Then open the same workflow in Tray Build so finance systems can adjust the duplicate thresholds, the verification requirements and the re-screening cadence in the visual canvas.
What it connects to
One vendor record has to reach everywhere that orders or pays.
NetSuite
Create and maintain the vendor with its payment details, usually the system of record for paying anybody.
Reads and writes
Coupa
Propagate the same vendor to procurement, so a purchase order and an invoice reference one entity.
Reads and writes
DocuSign
Take the signed supplier agreement and the bank detail confirmation, so verification has a document behind it.
Reads
Slack
Route the second approval on a bank change, and alert on a vendor created outside onboarding.
Writes
Okta
Resolve the requester and approver, so a bank change is attributable to two named people.
Reads
Snowflake
Land vendor history and every verification, so an audit of a payment change is a query.
Writes
Same build, other stacks
The design does not change if you run something else in one of these seats. The same prompts build it against SAP S/4HANA, Google BigQuery, Microsoft Teams, Azure Active Directory, Oracle or Databricks.
Named systems are the ones most teams run, not the only ones that work. Each is an authentication in your Tray workspace, referenced by name, so the workflow never holds a credential. Where we have a connector page, the name links to it.
Running it in production
This holds the bank details a company pays into. It is a fraud control before it is a data project.
The platform runs it, not a laptop under a desk
Duplicate checks at onboarding, nightly reconciliation and scheduled re-screening run on the same engine with a full history.
Every bank change is evidence
Who requested, who verified, by which method and against which number already held. That record is what a fraud investigation needs.
Credentials are held by the platform, never hardcoded
This workflow can change where money is sent. Its credentials are scoped narrowly, held in your workspace, and rotated on their own schedule.
Finance owns the thresholds
Duplicate confidence, verification requirements and re-screening cadence open in Tray Build, owned by the team accountable for payments.
Payments hold after any change
A short hold on all payments to a vendor whose details changed. It costs a day and it has stopped a great many frauds.
Questions people ask
Why verify bank changes out of band?
Because a request to change payment details is the most common invoice fraud there is. It arrives as a plausible email from a real supplier domain, and calling a number already on file is what stops it.
Why key on the legal entity?
Because one company can trade under four names and remain one payee. Treating each trading name as its own vendor is how the same invoice gets paid twice by two different people.
When should duplicates be detected?
At onboarding, before the record exists. The cleanup project everybody plans afterwards has never once been completed, and every duplicate is a duplicate payment waiting to happen.
What about dormant vendors?
Deactivate them. A vendor with no spend in a year, live bank details and nobody watching it is an attack surface rather than a record.
Should a vendor be creatable directly in the ERP?
No, and the count of vendors created outside onboarding should be reported. It is rarely zero, and each one skipped every control this workflow exists to apply.
Vibe-coding app guides
Vibe-code an entire app with Helix
This moves the data between systems. It does not give anybody a screen to work in. Build that app in Claude Code, Codex or Cursor, then deploy and run it governed on Tray Helix. Same kind of guide, same kind of prompts.
How to build a vendor security review tracker (opens helix.tray.ai in a new tab)
Related guides
Finance
How to build a procure-to-pay integration
Requisition to PO to receipt to payment, with the approval matrix as data, three-way matching, and the budget checked before the commitment. The prompts.
Finance
How to build AP invoice processing
Take invoices from wherever they arrive, extract and verify instead of trust, match against the order, and never pay the same one twice. The prompts that build it.
Legal and compliance
How to build a contract lifecycle sync
Extract the obligations rather than storing a PDF, put renewal and notice dates where somebody will see them, and never let the signed version drift. The prompts.
Platform engineering
How to migrate an SFTP batch feed to an API
Recover the semantics nobody wrote down, run both in parallel and diff, and cut over only after a month end. The Headless prompts that build it.
Last reviewed September 2026.