CSV import
Zero engineering: send your overdue book as a CSV and the Fieldproof operations team imports it for you through the CRM. Ideal for a pilot while your API integration is being built — everything downstream (field work, webhooks if configured, payments) works identically.
File format
One row per loan. Headers are exact, case-sensitive names — the dotted JSON
field names of the data contract
(borrower.name, loan.outstandingAmount, …) are not accepted as CSV
headers.
Required columns
| CSV header | Feeds | Rules |
|---|---|---|
LoanNo | sourceLoanNumber | Your stable loan ID, ≤ 64 characters, unique in your book. |
CustomerName | borrower.name | Full name. |
mobile | borrower.phone | Indian mobile; +91 / 91 / leading 0 stripped, must normalise to 10 digits. |
Pincode | borrower.address.pincode | 6 digits. |
Due Amount (or Pending Amount) | loan.outstandingAmount | Whole INR rupees, > 0. Use one of the two header names. |
Optional columns
| CSV header | Feeds | Notes |
|---|---|---|
email | borrower.email | |
Employer | borrower.employerName | |
address | borrower street address | Free text, one column. |
City | borrower.address.city | |
State | borrower.address.state | |
Loan Amount | loan.loanAmount | INR. |
Disbursal Amount | loan.disbursedAmount | INR. |
DPD | loan.dpd | Number or 61-90 style range (upper bound is used). Present but unparseable → row error. |
repayDate | loan.nextDueDate | YYYY-MM-DD, ISO datetime, DD-MM-YYYY, DD/MM/YYYY or DD-Mon-YY (e.g. 28-Apr-26). Present but unparseable → row error. |
Late Charges | loan.lateCharges | INR. |
roi | loan.interestRate | Rate of interest (%). |
tenure | loan.tenure | |
loanFrequency | loan.tenureUnit | e.g. months. |
disbursedDate | loan.disbursedDate | Same date formats as repayDate. |
Repay Amount | loan.totalRepayable | INR. |
totalCollection | loan.totalCollected | INR. |
loanType | loan.productName |
Any other column is ignored.
Sample file
LoanNo,CustomerName,mobile,Pincode,Due Amount,email,Employer,address,City,State,Loan Amount,Disbursal Amount,DPD,repayDate,Late Charges,roi,tenure,loanFrequency,disbursedDate,Repay Amount,totalCollection,loanType
LN-2026-000123,Ravi Sharma,+919876543210,560001,12500,[email protected],Acme Textiles Pvt Ltd,"12 MG Road, Near Trinity Metro",Bengaluru,Karnataka,50000,48500,45,2026-09-05,350,24,24,months,15-Mar-25,60000,47500,Personal Loan
LN-2026-000124,Priya Nair,9123456789,682001,8200,,,"Flat 4B, Sea View Apartments",Kochi,Kerala,,,61-90,05-09-2026,0,,,,,,,
Leave optional cells empty rather than writing N/A or - — a present but
unparseable DPD or date fails that row. Money is whole rupees (12500, not
12500.00 INR or paise). Wrap a value that contains a comma in double quotes,
as the address column above does.
How it works
- You send the file to your Fieldproof integration contact; the operations team uploads it through the CRM. Cadence is agreed at onboarding.
- Ops previews the file before committing it — the same per-row validation as the push API's dry-run. Rows fail individually; the rest of the file imports. Ask your integration contact for the row-error list of any file.
- Re-sending a file is safe: an identical, already-committed file is a no-op,
and a changed row updates the existing active case in place (same
re-push semantics as the API — an omitted
DPDorLate Chargesresets to 0; a loan whose earlier case is closed gets a fresh case). - Same
LoanNotwice in one file: the first row is kept, later duplicates are row errors — send each loan once, with its latest state. - Your existing export format may be usable as-is: a custom column mapping can be configured by ops for your organisation. Send a sample file to [email protected].
- Every case created from a CSV emits the same events (
case.received,payment.collected,case.closed, …) to your webhook or the poll feed once those are configured.
:::note Withdrawing a case
A loan simply disappearing from your next file does not close its case. Tell
your integration contact, or call
POST /cases/{sourceLoanNumber}/recall once
you have API credentials.
:::
When your API build is ready, switching to push changes nothing else — same data, same events, same payments.