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. Your team can see every imported case, and correct its data, in the organisation dashboard.
Downloads: blank template (header row only) · sample file (two example rows)
File format
This is the v2 format (October 2026). It carries the same fields as the data contract, under the column names below.
- CSV, UTF-8, comma-separated. The first row is the header row. One row per loan. Up to 20,000 rows per file — split a larger book into several files.
- An Excel workbook (
.xlsx, first sheet) is accepted too, with the same columns and rules. Date cells are read as dates and coordinates at their stored precision, not the decimals the sheet displays — but a coordinate stored as a number loses trailing zeros (12.9700→12.97), so keep the Text format described below. - Use the column names below. Header matching ignores upper/lower case, spaces
and punctuation (
Loan No,LoanNoandloan_noare the same column), and column order does not matter. The dotted JSON field names of the data contract (borrower.name,loan.outstandingAmount, …) are not accepted as CSV headers. - Columns we don't recognise are ignored, so you can leave your own extra columns in the file.
- Every required column must be present. A file without one is refused, or every row fails with the matching error.
Required columns
| CSV header | Feeds | Rules |
|---|---|---|
Loan No | sourceLoanNumber | Your stable loan ID, ≤ 64 characters, unique in your book. It must stay the same in every file you send. |
Customer Name | borrower.name | Full name. |
Mobile | borrower.phone | Indian mobile; +91 / 91 / leading 0 stripped, must normalise to 10 digits. |
Address | borrower.address.full (accepted in place of line1) | House / flat / building number and street — where the borrower actually lives. At least 5 characters, must contain a letter, not a placeholder (NA, -, null …). |
City | borrower.address.city | City or town. |
State | borrower.address.state | Indian state or union territory: the full name (Karnataka) or the 2-letter code (KA). Spacing, punctuation and common spelling variants are accepted (Tamilnadu, J & K, U.P., Orissa, Chattisgarh, New Delhi …). |
Pincode | borrower.address.pincode | 6 digits. |
Latitude | borrower.address.latitude | Latitude of the borrower's address in decimal degrees. At least 4 decimal places; 6 recommended. See coordinates. |
Longitude | borrower.address.longitude | Longitude of the borrower's address, same rules. |
Due Amount (or Pending Amount) | loan.outstandingAmount | Whole INR rupees, > 0. Use one of the two header names. |
Optional columns
| CSV header | Feeds | Notes |
|---|---|---|
Address Line 2 | borrower.address.line2 | Floor, wing, area / locality. |
Landmark | borrower.address.landmark | Nearby landmark that helps the partner find the house. |
DPD | loan.dpd | Number or 61-90 style range (upper bound is used). Strongly recommended — it sets visit priority. Present but unparseable (overdue) → row error; a placeholder (NA, N/A, -, null …) counts as empty, and an empty DPD on an update resets it to 0. |
Repay Date | loan.nextDueDate | YYYY-MM-DD (preferred), ISO datetime, DD-MM-YYYY, DD/MM/YYYY or DD-Mon-YY (e.g. 05-Nov-26). Present but unparseable (31/13/2026) → row error; a placeholder (NA, - …) counts as empty. |
EMI Amount | loan.emiAmount | INR. |
Late Charges | loan.lateCharges | INR. |
Email | borrower.email | |
Language | borrower.language | Borrower's preferred language, so we can brief the partner. |
Employer | borrower.employerName | |
Loan Amount | loan.loanAmount | INR. |
Disbursal Amount | loan.disbursedAmount | INR. |
Disbursed Date | loan.disbursedDate | Same date formats as Repay Date. |
ROI | loan.interestRate | Rate of interest (%), a number. |
Tenure | loan.tenure | A number. |
Loan Frequency | loan.tenureUnit | Unit of the tenure, e.g. months. |
Repay Amount (or Due_Date_Repay_Amount) | loan.totalRepayable | INR. |
Total Collection | loan.totalCollected | INR, already collected by you before hand-over. |
Loan Type | loan.productName | Product name shown to the partner. |
The full header row, ready to copy:
Loan No,Customer Name,Mobile,Address,Address Line 2,Landmark,City,State,Pincode,Latitude,Longitude,Due Amount,DPD,Repay Date,EMI Amount,Late Charges,Email,Language,Employer,Loan Amount,Disbursal Amount,Disbursed Date,ROI,Tenure,Loan Frequency,Repay Amount,Total Collection,Loan Type
v1 headers keep working
Because header matching ignores case, spaces and punctuation, files in the
earlier format keep importing: LoanNo, CustomerName, mobile, address,
repayDate, roi, loanFrequency, disbursedDate, totalCollection and
loanType match the v2 columns Loan No, Customer Name, Mobile,
Address, Repay Date, ROI, Loan Frequency, Disbursed Date,
Total Collection and Loan Type. What a v1 file is missing is the address
contract: add Latitude and Longitude (and Address, City and State if
you left them out), or its rows are rejected — unless your organisation is on
a grace period.
Coordinates
Latitude and Longitude must be the real location of the borrower's
address — the actual building. Do not send the centre of a pincode, city or
branch, your office location, or a default value. Field partners are matched,
checked in and paid by distance to this pin, so a row without valid
coordinates is rejected and no visit happens. The full rules and the exact
error texts are in the
data contract.
- Format: decimal degrees (WGS84) in two separate columns, with a dot as
the decimal separator —
Latitude12.975326,Longitude77.606262. - Wrong:
12°58'31"N(degrees-minutes-seconds),12,975326(comma as the decimal separator),12.97(too few decimals),0/0.0, or both numbers in one cell. A placeholder (NA,-,null…) counts as a missing coordinate. - At least 4 decimal places on both values (≈ 11 m); 6 recommended. We count the decimals in the text of your file, so make sure your spreadsheet does not cut them (see Excel below).
- Inside India: latitude roughly 6 to 37.5, longitude 67.5 to 97.8. If the two values look swapped, the error says so.
- One pin per address: the same coordinates used for borrowers in different pincodes in one file are a default, office or branch location — every such row is rejected. Several borrowers at one address with the same pincode is fine.
- Far from the pincode: if a pin is more than about 50 km from the area of
the row's
Pincode, the row still imports but comes back flagged as a warning, so you can check that the coordinates belong to that address.
Where to get them — use the most accurate source you have:
- A GPS location captured at the borrower's address: an onboarding or verification visit, or a borrower-app location captured at home.
- An address-verification or KYC provider that returns coordinates for the residence.
- Google Maps: open the exact building, right-click on it, and click the
coordinates shown at the top of the menu to copy them as
lat, lng(e.g.12.975326, 77.606262). The first number isLatitude, the second isLongitude— put them in two separate cells.
Preparing the file in Excel
- Before pasting data, set the
Loan No,Mobile,Pincode,LatitudeandLongitudecolumns to Text format. Otherwise Excel turns long numbers into9.88E+09or cuts off decimals, and those rows are rejected. - Save with File → Save As → CSV UTF-8 (Comma delimited).
- Open the saved file in a text editor once and check that the coordinates still show all their decimals.
Sample file
Loan No,Customer Name,Mobile,Address,Address Line 2,Landmark,City,State,Pincode,Latitude,Longitude,Due Amount,DPD,Repay Date,EMI Amount,Late Charges,Email,Language,Employer,Loan Amount,Disbursal Amount,Disbursed Date,ROI,Tenure,Loan Frequency,Repay Amount,Total Collection,Loan Type
LN-2026-000123,Ravi Sharma,9876543210,"12, MG Road",2nd Floor,Opp. Garuda Mall,Bengaluru,Karnataka,560001,12.975326,77.606262,12500,45,2026-11-05,2500,350,[email protected],Kannada,Acme Textiles Pvt Ltd,50000,48500,2025-03-15,24,24,months,60000,47500,Personal Loan
LN-2026-000124,Priya Nair,9123456789,"Flat 4B, Sea View Apartments, Princess Street",,Near St. Francis Church,Kochi,Kerala,682001,9.965389,76.242083,8200,61-90,2026-11-10,,0,,Malayalam,,,,,,,,,,
Leave optional cells empty rather than writing N/A or -. In a DPD or date
cell a placeholder (NA, N/A, -, null …) counts as empty, but any other
value we cannot read (overdue, 31/13/2026) 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.
Grace period
By default every row must meet the address contract. If Fieldproof has put
your organisation on a coordinate grace period, rows without Latitude and
Longitude (or without Address, City or State) still import — we place
those cases from the pincode / street address — and each one is reported back
as a warning. Coordinates that are present are always checked: a malformed
value, or only one of the two, is still an error (a placeholder such as NA
counts as absent, not malformed). A file committed before your grace period
started can be re-sent unchanged and is processed again under the grace
rules. The grace period ends automatically at its end date, and from then on
the same rows are rejected. See
grace period.
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 and warning list of any file, then fix and re-send only the rejected rows.
- Re-sending a file is safe: an identical, already-committed file is a no-op
as long as every loan in it still has a live case (a loan whose case has
since closed gets a fresh case), and a changed row updates the existing
active case in place (same
re-push semantics as the API — an omitted
DPDorLate Chargesresets to 0, so send them in every file; a loan whose earlier case is closed gets a fresh case). - Same
Loan Notwice in one file: the first row is kept, later duplicates are row errors — send each loan once, with its latest state. - The column set is fixed — there is no per-organisation column mapping for CSV. Because extra columns are ignored, your existing export works as-is as long as it also carries the required columns under the names above. Send a sample file to [email protected] if you want it checked.
- 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.