When you hire your first Indonesian contractor, payroll software will either get NPWP withholding right or not mention it at all. Most platforms fall into the second camp. They'll let you enter a contractor's bank account, calculate a gross payment, and stop. They won't ask for the NPWP (Nomor Pokok Wajib Pajak—Tax Identification Number). They won't calculate income tax withholding. And they won't generate the tax report you need to file with the DJP (Direktorat Jenderal Pajak, Indonesia's tax authority). This creates a gap between what you pay and what you report. The contractor expects the full amount. Your books show gross. The DJP expects a withholding report. Three weeks in, you're either overpaying to make it work, or you're out of compliance. Neither scales. Here's what gets Indonesian contractor payroll right: NPWP validation on hire, the correct withholding formula, field placement in your payroll system, and a filing timeline that matches the DJP calendar. NPWP validation and contractor intake: what you need on day one Before you issue the first invoice or process the first payment, you need four pieces of data. Most contractors have them; many platforms never ask. NPWP: 15-digit tax ID, issued by the DJP. Required for anyone earning above ~₹75M IDR (~₹50K USD) annually. If the contractor doesn't have one, they need to register before you can legally withhold. This is non-negotiable. Nama Wajib Pajak (registered name): Must match the NPWP registration exactly. This is what appears on the DJP withholding report. Alamat Wajib Pajak (registered address): The address on file with the DJP, not the contractor's mailing address. Status Kawin (marital status) and Tanggungan (dependents): These affect the non-taxable income threshold (PTKP) and the withholding calculation. Single, married, or married-with-dependents each use a different table. If your payroll platform doesn't have fields for NPWP, registered name, and marital status, you're already storing tax data in a spreadsheet or a separate system. That's where the first sync gap opens. Day 1 action: Request the contractor's NPWP and marital status. Cross-check the NPWP against the DJP's real-time validation API (via a registered tax consultant or a platform that integrates it). If they don't have an NPWP and their annual income will exceed 60M IDR, they must register with the DJP before you pay them. This takes 1–3 days. The withholding calculation: income tax (PPh 21) formula and thresholds Indonesian income tax withholding on contractor payments follows a specific formula. PPh 21 (Pasal 21, income tax on salaries and similar payments) applies to most contractor arrangements, and the rate depends on the contractor's annual income and dependents. The calculation works like this: Identify PTKP (non-taxable income threshold) based on marital status and dependents: Single: 54 million IDR/year Married (spouse): 58.5 million IDR/year Married + 1 dependent: 63 million IDR/year Married + 2 dependents: 67.5 million IDR/year Married + 3 dependents: 72 million IDR/year Calculate taxable income for the month: (Gross payment × 12) − PTKP. Divide by 12 to get the monthly taxable base. Apply the progressive tax rate: Up to 60 million IDR/year: 5% 60–250 million IDR/year: 15% on the portion above 60M 250–500 million IDR/year: 25% on the portion above 250M Over 500 million IDR/year: 30% on the portion above 500M Deduct BPJ (social security contributions) if applicable: Many contractors don't contribute to BPJ as non-employees, so this often doesn't apply. Confirm with the contractor. Round to the nearest 1,000 IDR. The DJP requires this rounding for reporting accuracy. For a single contractor earning 80 million IDR/year (6.67M/month): Taxable annual = (80M − 54M) = 26M. Tax = 26M × 5% = 1.3M/year, or ~108K/month. Net payment = 6.67M − 0.108M = 6.56M/month. Withhold 108K and file it monthly with the DJP. Most bundled payroll platforms either hard-code a flat withholding rate (15% across the board, which is wrong) or skip withholding entirely. A platform built for Indonesian compliance will have PTKP tables, progressive rate logic, and BPJ deduction fields. Orin's invoicing and billing module includes contractor withholding rules that map NPWP and calculate PPh 21 correctly; if you're managing payroll, your platform should do the same or integrate with a tax specialist. Field placement and payroll system setup To avoid sync gaps between your CRM, payroll system, and tax filings, every contractor record needs these fields in the same system or a tightly integrated one: Field Type Used For DJP Report? NPWP 15-digit text Tax ID validation; withholding identification Yes (row header) Nama Wajib Pajak Text (required exact match) Legal name for tax reporting Yes Status Kawin Dropdown: Single / Married / Widowed PTKP threshold calculation No, but affects withholding Jumlah Tanggungan Integer (0–3) PTKP threshold adjustment No, but affects withholding Alamat Wajib Pajak Text