You've found your contractor in Jakarta. They're available, they're affordable, and they're ready to start on Monday. Then compliance asks for their NPWP—Indonesia's taxpayer identification number—and everything stalls. No NPWP, no withholding calculation. No withholding record, no audit defense. The contractor can't legally invoice you. You can't legally pay them. The hire evaporates. This is not rare. Around 30% of contractor onboarding in Indonesia fails at the NPWP stage—either because contractors don't have one, the number doesn't validate, or you have no audit trail to prove you checked. The fix is not complexity; it's sequence. Collect NPWP before the contract, validate it against a live registry , store the proof, and map withholding rules to your invoicing platform. Done right, the whole flow takes 48 hours. Why NPWP validation stops before day one Indonesia requires every contractor—and every business they work with—to have a NPWP (Nomor Pokok Wajib Pajak). It's not optional, not a nice-to-have. DJP (Direktorat Jenderal Pajak) enforces it on both sides of the transaction. When you hire a contractor without validating their NPWP: You can't withhold tax correctly. DJP assumes 20% withholding by default if no NPWP is on file. You have no legal record of diligence. If audited, you cannot prove you attempted verification. The contractor cannot issue a legal invoice (Faktur). Invoices without NPWP fail MyInvois validation and LHDN rejects them. Your GL record is incomplete. You've recorded a payment but no corresponding tax withholding or contractor identity. The 30% failure rate comes from three sources: contractors without NPWP (roughly 12%), fake or mistyped numbers (10%), and onboarding flows that never ask (8%). Each one stalls differently. Collect NPWP before the contract, not after The playbook starts the moment a contractor applies or is identified. Do not send a contract first. Request NPWP before employment terms are discussed. Step 1: Add NPWP to your intake form. Before you create a contract, you need three pieces of data: Full legal name (Nama Lengkap) as registered with DJP NPWP (16-digit number) Contract type (freelance, project-based, retainer, T&M) These should live in your CRM as standard contractor fields. If you're still collecting this via email or PDF, validation and audit trails vanish the moment the attachment is forwarded. Step 2: Validate against DJP's live NPWP registry. Do not rely on format validation alone ('is it 16 digits?'). Format checks catch typos but not fraud. Instead, validate the NPWP against Indonesia's Directorate General of Taxes registry. This is not a government free-to-all API, but several platforms integrate it: Orin's built-in validation checks NPWP format and flags known-invalid ranges in real-time during intake. Wave (Indonesia) and Xero validate NPWP at invoice creation, but this is too late—you've already onboarded the contractor. Local third-party NPWP validators (e.g., Privy, Konektory) offer real-time registry checks but add cost and latency to your hiring flow. For most teams: validate format immediately in intake, then cross-check the number against your invoicing platform's validator when you create the first invoice. Mismatches flag before payment. Key rule: If your invoicing platform rejects an NPWP at invoice time, you've already onboarded the wrong contractor. Validate before contract signature. Map withholding rules to contractor type and contract length Indonesia's withholding rules vary by contractor category and contract term. This is where most finance teams fail—they assume all contractors withhold at 20%, but DJP rules are narrower. Withholding rates by contractor type: Freelance (non-corporate): 20% withholding if no NPWP; 15% if NPWP is verified. Service providers with corporate NPWP: 6% withholding (if contract value is consistent and documented). Retainer contracts (12+ months, ongoing): 2% withholding (if you issue a service agreement with DJP-standard clauses). Project-based (fixed term, deliverable-based): 10–20% depending on whether the contractor has other clients and contract terms are documented. If you withhold at the wrong rate, you either overpay the contractor (cost leak) or under-withhold and face DJP penalties when audited. The fix is to store the withholding rate in your CRM or invoicing system alongside the NPWP, so every invoice calculates it correctly. Step 3: Record contractor type and withholding rule at intake. In your contractor record (in your CRM ), capture: Contractor status (individual with NPWP, corporate entity, non-resident) Contract type (project, retainer, T&M, one-off) Contract start and end date Withholding rate (calculated from DJP rules, not guessed) This becomes your audit trail. If DJP asks why you withheld at 15% instead of 20%, you have the date, the contractor record, and the contract terms that justified it. Build the audit trail before payment DJP does not accept 'we forgot to check.' Your c