Skip to main content
Bharat Surveyभारत सर्वे
फील्ड में हाथ में पकड़े फोन पर खुला सर्वे ऐप
Features · Offline survey app · GPS survey app

Offline-first, GPS-verified, XLSForm-compatible, Hindi-first. Every feature, and what it means on the ground.

These are the rules and capabilities that keep a candidate's money from being wasted, a research agency's data trustworthy and a government survey's audit clean. 12 groups, 60+ capabilities — each one testable, none of them there to pad a list.

  • A full day offline, not one record lost
  • 5 location states on every submission
  • XLSForm import from Kobo, ODK, SurveyCTO
  • Seat limits enforced on the server
  • Live map in ~5 seconds
  • DPDP-aligned, data hosted in India
Volunteer appAndroid · offline
Hello, Ram Kumar
Today's work
Shift on
Assignment
Gram Panchayat Barauli
Target 40 homes14 done15 done16 done17 done
Shift
On · 2:14 h
Sync
6 phone · 8 server
Today's homes
  • Home 15 · RamlalDone
  • Home 16 · SunitaDone
  • Home 17 · LockedRevisit
  • Home 18 · MohanFilling…
✓ #BS-0413 synced to server
Start new survey
Survey 3/6 · AmenitiesOffline
How is drinking water in your area?
  • Comes regularly
  • Comes sometimes
  • Rarely / never
  • Don't know
✓ Section saved on phone · autosave
BackNext
Location evidenceOn every submission
Location evidence
Survey #BS-0412
  • In areaInside approx. boundary
  • Accuracy±12 m
  • Time09:42 · fresh fix
  • Mock GPSNot detected
  • Interview length11 min
Added to accepted count
  • In area
  • Near boundary
  • Outside area
  • Weak signal
  • Suspected fake GPS
Live dashboard~5 seconds · sample
Constituency 172 · Survey round 2Updated 12s ago · sample
3,000
Target homes
2,184
Visits
1,962
Completed
1,871
Accepted
Daily accepted surveysLast 12 days
Booth rating boardPolitical clients
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
A strongB fairC weakD very weakNo report today
  • 212 / 268reported today · sample
  • 4 boothssilent for 2 days
location states on every survey
In area · near boundary · outside · weak signal · fake GPS
Offline Work Permit
Set per project, with an honest deactivation rule
states / UTs of geography preloaded
LGD codes · down to village, ward, booth
Three promises

Verified beats claimed · Honest status everywhere · Volunteer-first

The feature list is long, but the same three ideas sit behind every line. If a feature broke any of them, we didn't build it.

Verified > claimed

Location evidence and QA state travel with every submission. Never a false “Verified” badge — if the boundary is estimated, so is the badge. An “outside area” record does not enter the approved count, no matter who asks.

Honest status, everywhere

“Safe on phone” vs “reached the server”, “last update 18 minutes ago”, “last Sheets sync”, “boundary: estimated” — old data never passes as live, and every report states its denominator.

Volunteer-first

Big buttons, 5–6 screens, Hindi, one question per screen, no network needed. Native on 2–3 GB RAM phones. Corrections come back with a reason. The app is built for the person walking door to door in the sun, not for the admin.

Offline survey appGPS survey app5 location statesXLSForm importSurvey form builderSeat-based licensingLive field trackingQA & back-checksPhoto proof surveySkip logicBooth & war roomDPDP-aligned
12 groups · 60+ capabilities

Survey software for every part of a field survey.

Pick a group on the left or keep scrolling. Each group lists only what exists in the app and panel or is in v1 scope; anything coming later is labelled that way.

See it in a demo
Offline-first

A full day without signal, and not one record lost

Download first, then go to the field

Pre-download

In the morning, on home Wi-Fi, the phone pulls today's area, forms, instructions, household list and map tiles. The app shows download status in plain words — “3 of 3 assignments ready” — so a volunteer knows nothing is missing before leaving the house.

Morning download07:30 · sample
Assignments · 3 of 3ready
Form · Amenities v3ready
Map tiles12 / 14 MB

Every section autosaved, encrypted

Local DB

Each section is written to an encrypted local database on the phone (SQLCipher) the moment it is complete. App closed, phone restarted, battery dead — reopen and you continue from the same question. Acceptance test: an 8-hour field session, 100 surveys, and no confirmed save lost after restarts and retries.

Offline
No network
6
Safe on phone
8
Synced to server
Syncs when network returns

“Safe on phone” ≠ “reached the server”

Honest status

Two counts are always on screen: records stored on the phone and records the server has confirmed. Volunteer and supervisor both know when a sync is still pending. Nothing is called “sent” until the server's acknowledgement arrives.

Automatic sync with retry and backoff

Sync

Sync runs in the background as soon as there is signal; failed attempts retry at growing intervals. A Wi-Fi-only option suits teams on tight data packs. Photos are shrunk on the phone first (5 MB → ~200 KB), so a sync can finish even on 2G or 3G.

Retry · growing intervalbackoff
First attempt30 s
Second1 m
Third5 m
Fourth and after15 m

A permanent unique ID, so never a duplicate

Idempotent

Every submission gets a permanent UUID on the phone itself. Send it ten times and the server still holds one record (AT-06). If the network drops mid-upload and the app resends, the count does not move.

Offline Work Permit — 24 hours

Rule

Each device gets a 24-hour offline permit, set per project. If a seat is closed or a device deactivated, an online phone stops at once; a fully offline phone stops when its permit runs out or at its next connection. We don't promise “switched off instantly”, because that would not be true.

GPS verification

Five location states, and never a false ‘Verified’ badge

Location evidence with every submission

Evidence

Lat/long, time, accuracy in metres, age of the fix, provider (GPS or network) and Android's mock-location flag are stored with every survey. This evidence is never overwritten — it stays on the original record even after an exception is approved.

Location evidence
Survey #BS-0412
  • In areaInside approx. boundary
  • Accuracy±12 m
  • Time09:42 · fresh fix
  • Mock GPSNot detected
  • Interview length11 min
Added to accepted count

Matched to the assigned area → 5 states

Verification

The server checks each submission against the estimated boundary of the volunteer's assigned village or ward: In area · Near boundary (review) · Outside area (not counted, alert) · Weak or stale signal · Suspected fake GPS (high priority). Geofencing only blocks; we classify, with the evidence attached.

Today's 1,962 submissionssample
In area1,871
Near boundary64
Outside area19
Weak signal8
Suspected fake GPS0

“Outside area” never enters the approved count

AT-04

A survey filled in from 14 km away gets flagged, goes to the review queue, does not raise the approved number, and alerts the leader or manager. That is acceptance test AT-04, repeated on every release.

Outside area · 14.2 km away · in review

Exceptions only with a reason

Supervisor

A supervisor can accept a record by writing a valid reason (for example, “village boundary wrong in LGD”). Exceptions are counted separately in reports; the original location state does not change. The audit log keeps who, when and why.

Estimated boundary = estimated badge

Honesty

Village and ward boundaries are estimated from a centroid and radius, so the badge says “approximately in area”. Only where a verified polygon exists does it say “verified”. Android's accuracy figure is also an estimate, and we display it as one.

Location only during a shift, user-initiated

Play policy

Foreground fine GPS on arrival check and on submit, when the volunteer taps. Live sharing during a shift runs with a clear persistent notification, and collection stops at “End shift”. No background tracking.

Form builder & XLSForm

Questionnaire tools with real form logic — move from Kobo, ODK or SurveyCTO in one file

The question types fieldwork needs

Question types

Single choice, multiple choice, number (integer or decimal), text, date/time, 1–5 rating, photo, signature, barcode/QR, GPS point, distance/duration, note/instruction. Every question can offer “don't know / not applicable / prefer not to say” — because blank is not the same as zero.

Public amenities v3 · 14 questionssingle · rating · photo
  • Drinking water status? · single · required
  • → Since how many days? · number · relevance
  • Road condition · rating 1–5
  • Photo of the problem · optional

Skip logic, validation, calculation

Logic

Relevance (which question shows when), constraints (with error messages in Hindi or English), calculations, piping (an earlier answer inside a later question), cascading selects (district → block → panchayat) and repeat groups (household members / roster). The same semantics XLSForm uses.

XLSForm import and export

Migration

Import XLSForms from Kobo, ODK or SurveyCTO directly — survey, choices and settings sheets; label::hi / label::en columns; constraint_message; select_one_from_file. Anything unsupported is listed line by line in the import report. No rebuilding old forms by hand.

Versioning and approval

Versions

Published forms are locked; a change creates a new version. Phones pick up the latest version on their next sync, while a survey already in progress finishes on the old one. Old answers keep the meaning of the old question, so wave-to-wave comparison stays safe. Sensitive questions go live only after company approval.

Multilingual labels

hi · en · +

Questions, options, errors and instructions in Hindi and English, with a one-tap language toggle in the app. Add more languages later through extra XLSForm columns (such as label::mr). The form library ships ready templates: voter mood, public amenities, household profile, retail audit, baseline.

Areas & assignments

Research management tools for geography: India preloaded, and every assignment says who, where, what, by when and how many

LGD-coded geography, from state to village

Geography

State → district → block → gram panchayat → village; urban body → ward → locality; Lok Sabha → assembly → polling station. Each record carries the official code, Hindi and English names, centroid, radius, polygon (where one exists) and a boundary status: verified / estimated / not available.

Uttar PradeshLucknowAssembly 172GP Barauli ✓+5 panchayats

The five parts of an assignment

Assignment

Volunteer + area + form + date range + target (for example, 300 households). States: Assigned → Accepted → In Progress → Paused/Completed → Closed. Area changes keep a full history, and one volunteer can hold several assignments at a time.

Supervisors see only their team and area

Scope

A supervisor sees their own team and assigned area — not another block's data, not another supervisor's volunteers. That scope is checked on every API request, not only hidden in the interface.

Booth master and manual pins

Political

Import an assembly-wise booth list from CSV or the CEO's PDF (part number, building, area, elector count). Place booth locations by manual pin or upload. On setup day a missing-mapping report shows how many records loaded and which mappings are incomplete.

Seat licensing

1 seat = 1 named person, with the limit enforced on the server

What a seat means

Definition

1 seat = 1 named person allowed to fill surveys in the field. A 10-seat plan means 10 active volunteers. Viewers, Owners, Admins and supervisors who don't survey need no seat. Booth in-charges and panna pramukhs who only file reports are seat-free too.

Team · 10 seats9 in use · 1 free
  • Ram Kumar · Barauli · shift on
  • Seema Devi · Kathauta · shift on
  • Arun Yadav · Malihabad · offline (permit 18h)
  • Pooja Verma · Barauli · off today

How an 11th volunteer joins

AT-01

With 10 of 10 seats in use, activation stops: “All 10 of your survey seats are in use. Send a request for an extra seat.” The request reaches the company panel → payment confirmed + approved → limit goes 10 → 11 → the new volunteer activates. Every step lands in the audit log.

Simultaneous requests

AT-02

Two requests for the last free seat at the same moment → a single server transaction lets only one through. The limit is never enforced client-side, so even a race condition cannot produce 11 active volunteers.

Replacement ≠ upgrade

Billing

Removing a volunteer and bringing in someone new is a replacement — same seat, no charge. Going from 10 to 11 is an upgrade, and it is chargeable. Each has its own history and receipt.

Device registration and phone changes

Device

Activation by invite link and OTP (MSG91); one volunteer = one authorised device. If a phone is lost or replaced, deactivate the old one in the panel and authorise the new one — same seat. Data saved earlier stays safe.

When a plan ends

Renewal

Plan expired: new collection stops, existing data becomes read-only, reports and exports keep working; renewal switches everything back on. Renewal reminders go out 15, 7 and 1 day before.

Seat usage10 seats · sample
Active today9 / 10
Plan period used65 / 90 days
Live monitoring

Survey dashboard software: field to screen in ~5 seconds, without a phone call

Live map

Live map

During a shift: each volunteer's last location, time, accuracy, shift status and the estimated boundary of their assigned area, all on one map (MapLibre). SSE realtime updates it in about 5 seconds on a normal network. Voters and respondents are never tracked.

Constituency 172 · Survey round 2Updated 12s ago · sample
3,000
Target homes
2,184
Visits
1,962
Completed
1,871
Accepted
Daily accepted surveysLast 12 days

Activity timeline

Timeline

Shift Started → Arrival Check → Survey Started / Saved / Submitted → Paused → Resumed → Shift Ended — every event with time and location. A supervisor sees at a glance how each person's day went.

Honest timestamps

Honest

If the network drops, the dashboard says “last update 18 minutes ago” instead of passing an old location off as live. Reports carry two times: the app's last server update and the last Sheets sync.

Progress against target

Progress

Assigned and finished areas, visits, complete and partial surveys, locked houses, refusals — by panchayat, ward or volunteer. Today's pace against target, with lagging areas pushed to the top.

Target vs done · by panchayatsample
GP Mal246 / 300
GP Barauli192 / 300
GP Kathauta91 / 240
GP Rahimabad · lagging34 / 200

Leader view inside the app

Mobile

A read-only view for the leader or manager in the same Android app: Overview → Map → Activity → Alerts. The panel is mobile-responsive, so it works from the back seat of a car too.

Alerts

Whatever is going wrong sits at the top of the list

Alert types

Rules

Survey outside area · suspected fake GPS · interview too fast · inactive too long (shift on, no event for 45 minutes) · sync pending (records on the phone, not on the server) · Offline Work Permit about to expire · assignment deadline close · no report from a booth today.

Outside area · 14.2 km away · in review

Priority and ownership

Triage

Every alert gets a priority (high/medium/low) and an owner (a supervisor). States: new → seen → action taken → closed. Closing requires a reason, and the history shows up in reports.

Where alerts land

Channels

The client panel's alert list, the Leader view in the app, and FCM push (new assignment, correction request, seat approval). Team notices stay in the app's in-app inbox — in line with WhatsApp policy, not outside it.

Signal, not noise

Signal

Repeat alerts for the same volunteer and the same cause are grouped into one thread. Rules are adjustable per project (for example, a 6-minute speed limit or 45 minutes inactive).

QA & back-checks

Suspicious records go to review with a risk score; the rest are approved automatically

Question-level audit log

Paradata

Time spent on each question, navigation (forward/back), changed answers and total duration travel with the record. It helps training too: you can see where volunteers get stuck.

QA queue · 64 in reviewrisk-score
  • #BS-0398 · outside area 14.2 km · 92
  • #BS-0402 · interview 1m 40s (limit 6m) · 81
  • #BS-0377 · duplicate house label + location · 77
  • #BS-0355 · near boundary · accuracy 40 m · 41

Automatic checks

Checks

Speed limit (interviews shorter than a set time are flagged or blocked), duplicates (house label + location + answer pattern), contradictory answers (Q4 vs Q9), impossible time/distance sequences (two villages 5 minutes apart), repeated patterns (identical answers in a row). Identical answers are not automatically fraud — only a signal.

A risk-scored review queue

Queue

Each signal adds weight to a 0–100 score, and the queue is sorted by it. Three-state validation: approved / on hold / rejected. Only approved records enter the approved count.

How a risk score adds up#BS-0398 · sample
Outside area 14.2 km+60
Interview 1m 40s+22
Repeated pattern+10
Total score92 / 100

Send back for correction

Correction

A supervisor returns a record to the volunteer with a written reason; it appears on the app's pending/correction screen with that reason, and every resubmission is kept as a version.

Back-check assignments

Back-check

An independent volunteer or supervisor is assigned to re-check a sample of households; a short back-check form links to the parent record, and the match rate appears in reports.

Reports & exports

Survey software with data analysis tools: four reports, honest denominators, your formats

Four reports

Reports

A. Work progress (assigned/finished areas, visits, complete/partial, locked houses, refusals) · B. Data quality (received/approved/in review/correction/exception/unclear) · C. Local issues (type, duration, severity, change over time) · D. Help requests (received → assigned → actioned → closed).

Constituency 172 · Survey round 2Updated 12s ago · sample
3,000
Target homes
2,184
Visits
1,962
Completed
1,871
Accepted
Daily accepted surveysLast 12 days

The right denominator

Honest %

240 completed, 210 approved; 180 valid answers to the water question; 90 reported a problem → 50%. Every report states the period, form version, response count and survey method. A convenience sample is not a “representative sample” of a whole assembly seat, and the report says so.

Water question · denominatorsample
Completed surveys240
Approved210
Valid answers180
Reported a problem → 50%90

Filters and comparison

Filters

Area (district/block/panchayat/village/ward/booth), date, volunteer, form version, location state. Round 1 vs round 2 compared on the same question version.

CSV · Excel · PDF

Export

Full data in CSV/Excel (code and label columns both), panchayat- or ward-wise PDF reports in Hindi, and photo ZIPs via signed URLs. Every export is audit-logged (who, when, what).

Google Sheets one-way copy

Sheets

Overview, Area, Quality, Team and Issues tabs that update themselves. Editing in Sheets never changes the core data; if Sheets is down or over quota, the app and dashboard keep running. An API comes in a later version.

Security & compliance

Enterprise survey software controls: tenant isolation, encryption, audit — built in, not fine print

Tenant isolation

AT-03

Customer A's data never reaches customer B — not through API, database, files, exports or live views. Postgres Row-Level Security on every tenant. Acceptance test: A tries to open B's record, API or export → access denied.

RBAC + area

Access

Role (Owner/Admin/Viewer/Supervisor/Volunteer) and assigned area are both checked on every API request. Staff permissions are module-scoped; sensitive access needs a reason and is audit-logged.

Encryption

Crypto

HTTPS in transit; sensitive fields encrypted at rest; SQLCipher-encrypted database on the phone; photos on Cloudflare R2 behind signed URLs.

Audit log

Audit

Who, what, when and why — seat changes, exceptions, exports, form publishing, staff access. Read-only and tamper-evident.

DPDP Act 2023

Consent

An introduction-and-consent screen (time and version recorded), a contact vault kept apart from survey answers, retention policy per project, data hosted in India. No voter-roll personal data import in v1.

Backup / restore

AT-12

Daily pg_dump → R2 plus weekly snapshots; restores are tested (a backup must come back correct). Load test AT-14: 100 devices + 100,000 records, dashboard in ~5 seconds.

Volunteer app

Hindi-first, 5–6 screens, native on 2–3 GB RAM phones

Today’s work

Screen 1

Today's assignments, target vs done, shift status and sync counts on one screen. Morning download, then a single “Start new survey” button. Big buttons, more tapping than typing, and a font-size setting.

Hello, Ram Kumar
Today's work
Shift on
Assignment
Gram Panchayat Barauli
Target 40 homes14 done15 done16 done17 done
Shift
On · 2:14 h
Sync
6 phone · 8 server
Today's homes
  • Home 15 · RamlalDone
  • Home 16 · SunitaDone
  • Home 17 · LockedRevisit
  • Home 18 · MohanFilling…
✓ #BS-0413 synced to server
Start new survey

Forms — one question per screen

Screen 4

The next question follows skip logic, with error messages in Hindi, a progress bar and autosave on every section. Contrast readable in harsh sunlight; native Kotlin/Compose on 2–3 GB RAM Android — no heavy webview.

Survey 3/6 · AmenitiesOffline
How is drinking water in your area?
  • Comes regularly
  • Comes sometimes
  • Rarely / never
  • Don't know
✓ Section saved on phone · autosave
BackNext

Shift, arrival check, consent, visit outcome

Flow

“Start shift” → location fix on reaching the area → an introduction and consent at every door (who is running the survey, why, and that it is voluntary) → form → outcome: complete / partial / refused / no contact / house locked / revisit. “Refused” gets recorded too — it is data.

Pending / correction, sync, help

Screens 5–6

Records returned from review come with their reason; the sync screen shows phone and server counts plus the last sync time; help holds training videos and a message line to the supervisor. Photos capture public problems from the camera — faces are not the default.

Booth & war room

For political clients — every booth’s team, rating and today’s report

Booth master and committee

Booth

Part number, booth name, building, area, elector count (M/F/other), coordinates. An optional mandal / shakti kendra layer (5–7 booths). Booth in-charge, BLA and members; panna pramukhs with their page ranges. These are “field roles” — only people who fill surveys take seats.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
A strongB fairC weakD very weakNo report today

A/B/C/D rating

Rating

Every booth's rating with reason and history; past election margins entered manually. A heat-map on the board shows weak booths at a glance.

268 booths · ratingsample
A strong91
B fair80
C weak64
D very weak33

Daily booth report

Daily

A 2-minute form: activities, households contacted, issues, photos. A compliance board shows which booths haven't reported today and for how many days in a row. Filled offline, synced later.

Polling-day mode

Polling day

Hourly turnout entry per booth, a manual count of “supporters not yet out”, lagging booths and missing updates — live on the war room board. Voter-list import, in-app voter slips and IVR are not in v1.

Screen gallery · app, panel and field

The volunteer's app, the supervisor's evidence card, the leader's dashboard and the booth board are all built from the same record. Scroll and the three rows drift in different directions; hover a tile to look closer. Every figure is a sample.

bharatsurvey.org/app/172/live
Ram Kumar · shift on
26.8467 N · 80.9462 E · ±12 m
14
Received
12
Accepted
1
Review
1
Outside
Live map · every volunteer on shift
The app in a volunteer’s hand
The app in a volunteer’s hand
Hello, Ram Kumar
Today's work
Shift on
Assignment
Gram Panchayat Barauli
Target 40 homes14 done15 done16 done17 done
Shift
On · 2:14 h
Sync
6 phone · 8 server
Today's homes
  • Home 15 · RamlalDone
  • Home 16 · SunitaDone
  • Home 17 · LockedRevisit
  • Home 18 · MohanFilling…
✓ #BS-0413 synced to server
Start new survey
Today’s work · the app’s first screen
Constituency 172 · Survey round 2Updated 12s ago · sample
3,000
Target homes
2,184
Visits
1,962
Completed
1,871
Accepted
Daily accepted surveysLast 12 days
Quality
Accepted1871
In review64
Outside area19
Weak signal8
Top issues · by panchayat
Water62%
Roads48%
Power31%
Drains24%
Dashboard · progress and quality
Introduction and consent at the door
Introduction and consent at the door
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
A strongB fairC weakD very weakNo report today
Booth rating board · A/B/C/D
Survey 3/6 · AmenitiesOffline
How is drinking water in your area?
  • Comes regularly
  • Comes sometimes
  • Rarely / never
  • Don't know
✓ Section saved on phone · autosave
BackNext
One question per screen
War room · live dashboard
War room · live dashboard
Location evidence
Survey #BS-0412
  • In areaInside approx. boundary
  • Accuracy±12 m
  • Time09:42 · fresh fix
  • Mock GPSNot detected
  • Interview length11 min
Added to accepted count
Location evidence · on every submission
Sync
6
Safe on phone
8
Synced to server
Last sync12:40
Offline permit18 h left
Photos pending3
Sync now
Sync · on phone vs on server
Morning briefing
Morning briefing
Home #17 · Visit outcome
  • Complete
  • Partial
  • Declined
  • No contact
  • Home locked
  • Revisit
Save
Visit outcome · every household
Retail audit · photo proof
Retail audit · photo proof
Leader view · read-only
Constituency 172
9
Shifts on
212
Accepted today
7
Open alerts
64
In review
High · outside area 14.2 km
#BS-0398 · 11:02 · sample
Updated 12s ago
Leader view · read-only in the app
Village · LGD-coded area
Village · LGD-coded area
GPS verification · 5 location states

One submission, five outcomes: a survey management system with a rule for each.

Geofencing says yes or no. We say what the evidence shows, and what happens to the record because of it. Switch tabs to see each state.

Inside the assigned boundary — added to the approved count.

The submission sits inside the village or ward's estimated boundary (centroid + radius) or a verified polygon, accuracy is acceptable (say ≤ 50 m), the fix is fresh and there is no mock flag. The record moves towards “approved” on its own — provided the other QA signals (speed, duplicates) are clean.

  • Badge: “approximately in area” or “verified”, depending on boundary status
  • These are the records that make up a report’s denominator
  • Evidence (lat/long, accuracy, time) always stays with the record
Location evidence
Survey #BS-0412
  • In areaInside approx. boundary
  • Accuracy±12 m
  • Time09:42 · fresh fix
  • Mock GPSNot detected
  • Interview length11 min
Added to accepted count
Sync pipeline · phone to dashboard

Keep scrolling: each stop opens, shows its job and makes room for the next. From tapping “Submit” to the leader's screen, nobody has to lift a finger — yet every step is accounted for.

01The phone’s encrypted databaseSQLCipher · phone

As each section is completed, its answers are written to the phone’s encrypted local database. Tapping submit gives the record a permanent UUID, a timestamp and its location evidence. The network plays no part up to here — so a dead battery or a closed app doesn’t eat data.

  • The ‘safe on phone’ count goes up
  • Data on a lost phone can’t be read
  • Evidence: lat/long, accuracy, fix age, mock flag
Offline
No network
6
Safe on phone
8
Synced to server
Syncs when network returns
02Sync queue and retryWorkManager · queue

When signal returns, the queue runs in the background: answers and metadata first, then photos (shrunk on the phone from 5 MB to ~200 KB). Failed attempts retry at 30 seconds, 1 minute, 5 minutes and 15 minutes. A Wi-Fi-only option helps teams on limited data.

  • Photos go last so sync can finish on 2G/3G
  • Once answers arrive the record is ‘on server’, photos ‘pending’
  • Every successful sync renews the Offline Work Permit for 24 hours
Queue · Ram Kumar's phone12:40 · sample
Answers sent14 / 14
Photos uploaded5 / 8
Next attemptin 1 m
03Dedupe and acknowledgement on the serverIdempotent API · server

The server looks at the UUID. If it is new, a record is created; if it already exists, the same record comes back with a 200 acknowledgement. So a survey sent ten times over a patchy network still counts once. Only after that acknowledgement does the app say ‘reached the server’.

  • AT-06: the same record synced repeatedly → exactly one
  • A new version = correction history, never an overwrite
  • Tenant and area checks run on this same request
One UUID · ten attemptssample
Attempts from phone10
Records on server1
04Location state and QAPostGIS · rules

Now the evidence is tested: matched against the assigned boundary for one of five location states, then checked for speed, duplicates, contradictions and impossible sequences. The signals add up to a 0–100 risk score. Clean records are approved automatically; suspicious ones join the queue.

  • ‘Outside area’ never enters the approved count
  • Exceptions only with a reason; the original evidence stays put
  • Back-checks link to the parent record
Location evidence
Survey #BS-0412
  • In areaInside approx. boundary
  • Accuracy±12 m
  • Time09:42 · fresh fix
  • Mock GPSNot detected
  • Interview length11 min
Added to accepted count
05Dashboard, alerts and SheetsSSE · realtime

An approved record reaches dashboard counts, the live map and reports in about 5 seconds on a normal network. ‘Outside’ and ‘fake GPS’ become alerts routed to the responsible supervisor. Every 15 minutes the one-way Google Sheets copy refreshes.

  • Always two times: server update and Sheets sync
  • Old data is never labelled ‘live’
  • If Sheets fails, the app and dashboard keep running
Constituency 172 · Survey round 2Updated 12s ago · sample
3,000
Target homes
2,184
Visits
1,962
Completed
1,871
Accepted
Daily accepted surveysLast 12 days
Our standard

Volunteer app · 12 screens

Every screen a volunteer ever sees — Hindi-first, one task per screen

The ring turns on its own and pauses when you hover. Volunteers see only 5–6 of these screens each day; the rest (corrections, help, Leader view) appear when needed. Each screen has one main button, so 45 minutes of training is enough.

What if…

Eight things that go wrong in the field, and exactly what the system does

Everything works in a demo. The real question is what happens in a Barauli lane at two in the afternoon on 9% battery. Move your cursor over the cards.

The phone dies mid-survey?

The last completed section is already autosaved. Switch on, open the app — household #17 continues from question 9, not from the start.

Nothing lost

No signal all day?

Work carries on. In the evening the screen reads ‘38 on phone, 0 on server’; open the app on home Wi-Fi and the queue starts moving. The Offline Work Permit lasts 24 hours, so one sync a night is needed.

Permit 24 h

No GPS fix under a roof?

The app doesn’t block the survey. The record goes to ‘weak signal’ and a separate ‘unclear’ count. The volunteer is prompted to step to the door or into the open and retake the fix.

Neither in nor out

A volunteer surveys the next village by mistake?

The arrival check asks first: ‘2.4 km from your boundary — are you in the right place?’ A record filled anyway is flagged ‘outside area’ and goes to review; a supervisor can accept it only with a written reason.

Exception with reason

The form must change mid-round?

The change becomes a new version (v3 → v4). Phones take v4 on the next sync; a survey already running on v3 finishes on v3. Reports filter by version, so old and new answers never blur together.

Version lock

A volunteer loses their phone?

Deactivate the device in the panel and authorise a new one — same seat, no charge. If the lost phone is online it stops at once; if offline, when its permit runs out. The local database is encrypted.

Replacement

Two people activate on the last free seat at once?

A single server transaction lets only one through; the other sees a clear message that seats are full and an extra seat can be requested. That is AT-02.

AT-02

Someone spoofs location with a mock app?

Android’s mock flag is stored with the record. It goes to ‘suspected fake GPS’ at the top risk score, and that volunteer’s other records from the same day go to review. A suspicion, not a verdict — a back-check confirms it.

High priority
Technical specification

Question types · sync rules · permit rules · RBAC · exports · limits

For IT teams, research-agency data managers and technical advisers in government departments — the same rules that live in the code.

Question types

  • select_one, select_multiple (radio/checkbox, with “other” text), integer, decimal, text, date, time, datetime
  • rating (1–5 / 1–10), photo (camera/gallery, auto-compress), signature, barcode/QR, geopoint, note, calculate, hidden
  • repeat group (roster, with a maximum), cascading select (choice_filter), select_one_from_file
  • “Don’t know / not applicable / prefer not to say” on every question — separate codes, never blank

Sync rules

  • A client-generated UUID for every submission; the server is idempotent — a repeat returns 200 and the same record
  • Retry: exponential backoff (30s → 1m → 5m → 15m) in the background via WorkManager; Wi-Fi-only option
  • Order: metadata and answers first, then photos (signed URL, resumable); once answers arrive the record is “on server”, photos “pending”
  • Conflicts: a new version on the same UUID becomes correction history, never an overwrite
  • Form versions arrive on the next sync; a survey in progress finishes on its old version

Offline Work Permit rules

  • Each successful sync grants the device a 24-hour permit (adjustable per project)
  • Permit expired: no new surveys, saved data stays safe, syncing is still allowed
  • Seat closed / device deactivated: an online phone stops at once; an offline phone when its permit ends or at next connection
  • The app shows remaining permit time, warns 4 hours ahead, and the panel raises an alert

Roles and permissions (RBAC)

  • Super Admin (company): everything · Staff (QA/Billing/Support/Geo): module-scoped, sensitive access with a reason
  • Client Owner: team, assignments, live map, reports, seat requests, booth/war room · Client Admin: the same minus billing · Viewer: read-only
  • Supervisor: own team and area — review, corrections, back-checks, daily booth reports · Volunteer: surveys, shifts, sync (takes a seat)
  • Booth Pramukh / Panna Pramukh: light app — daily reports, turnout entry (a seat only if they survey)
  • Role + tenant + area checked on every API request; Postgres RLS

Exports and integrations

  • CSV/Excel: code + label columns, repeat groups on separate sheets, location-state and QA-state columns, form version
  • PDF: panchayat-, ward- or booth-wise reports in Hindi with charts; photo ZIPs via time-limited signed URLs
  • Google Sheets: one-way copy, 5 tabs, every 15 minutes or on demand; if Sheets fails, app and dashboard are unaffected
  • XLSForm export: take your form back out as XLSForm — no vendor lock-in
  • API: in a later version; exports are audit-logged today

Limits and targets

  • Android 8.0+, 2 GB RAM, ~60 MB app; forms tested up to 300 questions; up to 10 photos per survey
  • Load target AT-14: 100 devices at once, 100,000 records, dashboard in ~5 seconds (measured during the pilot)
  • Live location during shifts: every ~30–60 seconds while moving, less often when still — a battery target, verified in the pilot
  • No iOS app in v1; Leader view and panel work in a mobile browser
  • Voter-list import, IVR/call centre and political WhatsApp messaging are outside v1 scope
Acceptance tests

Saying “done” isn’t enough — these tests have to pass.

These acceptance tests run again before every release. In a pilot, the owner runs them personally.

Ask about a pilot
AT-01/02 · Seat limit and race
With 10 seats full, an 11th can’t activate without approval; two simultaneous requests for the last seat → only one succeeds.
AT-03 · Tenant isolation
Customer A tries to open customer B’s record, API or export → access denied.
AT-04 · Outside area
Fill a survey from far away → flag + review; the approved number doesn’t rise; the leader is alerted.
AT-05/06 · Offline, duplicates
Fill offline, close and reopen the app → record safe; sync the same record repeatedly → exactly one.
AT-12/14 · Restore, load
Restore from backup comes back correct; 100 devices + 100,000 records; dashboard updates in ~5 seconds.
Choose your method

Paper + Excel vs a generic online form vs a verified field-survey platform

Each has its place. Below are the questions worth asking before a survey starts. ‘Generic online form’ means any link-based form tool; their capabilities vary by tool, so read the middle column as ‘usually’.

Three ways to run a survey, compared
QuestionPaper + ExcelGeneric online formBharat Survey
A full day without networkYes, but typing comes laterUsually notYes — autosave, sync later
Proof of where the survey was filledUsually not5 location states on every submission
Duplicate and fake-survey checksBy hand, afterwardsLimitedUUID + risk-score queue + back-checks
Skip logic, validation, rosterPartialXLSForm semantics
Which volunteer is where right nowPhone aroundLive map during shifts
Who can fill surveysAs many as forms printedAnyone with the linkNamed seats, limit on the server
When reports arriveDays or weeks laterInstantly, with no QA~5 seconds, approved records only
Consent record (DPDP)Depends on the formTime and text version logged
Best suited to20–30 households, onceOnline respondents, small pollsDoor-to-door or outlet-wise field teams
Honestly

When this is the wrong tool

Not every survey needs a field platform. In these cases we'll point you somewhere else ourselves.

Online panel

Panel-based market research software

If respondents fill a link from an email or SMS — customer satisfaction, employee surveys, or user research software for product teams — that isn’t our scope. Bharat Survey fits when someone from your team stands in front of the respondent and fills the form.
Very small job

A one-off poll of 20–30 answers

Seats, areas and a QA queue are more than that needs, and a free form tool will do; the same goes for online poll software or polling software for a quick vote, or a survey app for small business India shop owners want for a single customer poll. Our smallest sensible scale is one ward or panchayat and a few days of fieldwork.
iPhone team

Your whole field team is on iOS

The volunteer app is Android-only in v1. The panel and Leader view run in any mobile browser, but filling surveys needs an Android phone.
Voter-list canvassing

Name-by-name contact from the electoral roll

Voter-roll personal data isn’t imported into the app in v1, the app generates no voter slips and voters are never tracked. We work with booth-level masters and door-to-door surveys. The voter list in Excel and printed slips are a separate voter list data service.
Calls / IVR

Phone surveys or a call centre

IVR, call centres and political WhatsApp messaging aren’t part of the product. Team notices stay in the app’s in-app inbox. If you want a survey tool with unlimited responses from anyone holding a link, a web form suits that better than named field seats.
Exact boundary disputes

Land-survey-grade precision

Village and ward boundaries are estimates, and phone GPS can be off by metres. This isn’t a tool for land measurement or legal boundary work.

How does an offline survey app work?

An offline survey app is more than a form that opens without signal. Three questions matter: where the data is saved, when and how it reaches the server, and what is lost if something breaks in between. In Bharat Survey every section is saved immediately to an encrypted local database on the phone; if the app closes, the phone restarts or the battery dies, you reopen and carry on. Sync starts in the background as soon as there is signal and retries at growing intervals when it fails. Each submission gets a permanent UUID on the phone, so sending it ten times still creates one record on the server.

Most important of all, the app always shows two counts: “safe on phone” and “reached the server”. Most survey apps hide that difference, and you find out in the evening that 40 surveys never left the phone. Our rule: no record is called “sent” until the server's acknowledgement arrives.

Offline Work Permit — how long can a phone stay offline?

Every successful sync gives the device a 24-hour offline permit (adjustable per project). When it expires, no new survey can start, but saved data stays safe and syncing is still allowed. The same rule applies when a seat is closed: a fully offline phone stops when its permit ends or at its next connection. We don't promise “switched off instantly”, because technically that would be a lie.

GPS geofencing vs GPS verification

Geofencing draws a circle and blocks the survey outside it. In the field it fails two ways: village boundaries are estimates, so valid houses on the edge look “outside”; and a mock-location app can easily fake a point inside the circle. Verification works differently — it doesn't block, it records evidence (lat/long, accuracy, fix age, provider, mock flag) and the server sorts it into five states. Only “in area” enters the approved count; “near boundary” goes to review; “outside area” and “fake GPS” jump to the top of the queue with an alert; “weak signal” goes into a separate unclear count. The evidence is never erased, even when an exception is approved.

The truth about GPS accuracy

The accuracy Android reports is a 68% confidence estimate, not proof. In dense lanes, under a roof or on an older phone, 200 m or worse is normal. So we use accuracy as a threshold (say ≤ 50 m) and keep poorer fixes in “weak signal” — neither inside nor outside. The app suggests stepping into the open and taking the fix again.

What is XLSForm?

XLSForm is the Excel-based standard that Kobo, ODK and SurveyCTO run on. It has three sheets: survey (type, name, label, relevant, constraint, calculation), choices (list_name, name, label) and settings (form_id, version, default_language). Multilingual labels come from label::hi and label::en columns. Bharat Survey imports XLSForms directly — question types, skip logic, constraints, choice lists, cascading selects, repeat groups and multilingual labels included. Anything unsupported is listed line by line in the import report, so you never have to guess. You can export your form back to XLSForm too — no vendor lock-in.

Survey QA checklist — how to catch fake surveys

QA is not only about location. A good survey QA checklist looks for these signals: (1) interview length against a speed limit — a 6-minute survey doesn't happen in 1 minute 40 seconds; (2) time per question — 2 seconds a question means it wasn't read; (3) duplicates — matching house label, location and answer pattern; (4) contradictions — “water comes regularly” and “water is the biggest problem” together; (5) impossible sequences — two villages 5 minutes apart; (6) repetition — one volunteer giving identical answers again and again; (7) the mock-location flag. The signals add up to a risk score; suspicious records go to review and the rest are approved automatically. And the most reliable check of all is an independent back-check: a second person re-fills a short form at sample households, with the match rate shown in reports.

Comparing top survey software in India 2026? Check these before fieldwork

  • Every question has a ‘don’t know’ option
  • Speed-limit and inactivity thresholds are set per project
  • You know each area’s boundary status (verified / estimated)
  • Supervisors are trained on review and back-checks
  • You ran AT-04 yourself on the pilot day
  • The report denominator is decided (completed / approved / valid)
Kobo / ODK

XLSForm import

survey · choices · settings sheets; label::hi/en
SurveyCTO

Same semantics

relevant, constraint, calculation, repeat

Field problems and how to fix them — a troubleshooting guide

These are the snags that turn up in the first week of any mobile survey. Each one lists what the app shows, what the volunteer should do and what the supervisor sees in the panel. The same list is part of the 60-minute supervisor training.

“It won't sync”

Start with the two counts on the sync screen. “6 on phone, 8 on server” means 6 records are waiting in the queue — they are not lost. There are three usual causes: mobile data is off or used up; the Wi-Fi-only option is on while the phone is on mobile data; or battery saver has stopped background work. The fix: open the app, tap “Sync now” and keep the screen on. Photos go last, so “3 photos pending” for a while is normal. In the panel, the supervisor sees a “sync pending” alert saying how many records have been on the phone for how many hours.

“No location” or very poor accuracy

GPS needs sky, not network. Inside a room, under a tin roof or in a narrow lane, a fix arrives late or at ±200 m. The fix: step to the doorway or courtyard, wait 20–30 seconds, then repeat the arrival check. Location mode should be “High accuracy”. If the fix is still weak, fill the survey anyway — the record goes to “weak signal”, it is not rejected. If one phone does this again and again, that points to training or hardware.

“My survey shows ‘outside area’, but I was in the village”

Village boundaries are estimated from a centroid and radius. In large or spread-out villages, hamlets on the edge can fall outside the radius — such records usually land in “near boundary”, not “outside”. If a whole hamlet keeps showing “outside”, the LGD centroid for that village may be wrong. The supervisor grants an exception with a reason, and our team corrects that area's radius or polygon; older records are reclassified while the original evidence stays the same.

“I can't start a new survey”

There are three possibilities, and the app gives a clear message for each: the Offline Work Permit has expired (no sync for 24 hours) — get to a network and sync, and the permit renews; the seat or device has been deactivated — talk to your supervisor; or the plan period has ended — new collection stops, but old data and reports stay viewable. In every case, records saved on the phone remain safe and can still sync.

“The new question isn't showing in the form”

A new version reaches the phone on the next successful sync. A survey already started on the old version finishes on it. When downloading “today's work” in the morning, the form version is shown on screen (for example, “Amenities v4”) — at the briefing, the supervisor can have everyone check that number.

“The OTP isn't arriving”

The invite goes to the mobile number entered in the panel. A single wrong digit is the most common cause; DND or weak signal is the next. The supervisor can resend the invite from the panel.

Devices and battery — practical advice

The app is built for Android phones with 2–3 GB RAM, so nobody needs to buy a new phone. Battery makes the biggest difference: during a shift, live location is sent every ~30–60 seconds while moving and less often when still. That is a battery target we measure on your phones during the pilot — we don't quote a fixed percentage in advance. Screen brightness in sunlight is the largest drain; a bigger font size lets you keep brightness a little lower. A shared phone (one phone, two volunteers) won't work, because 1 seat = 1 person = 1 authorised device.

An Android phone held in sunlight, showing a survey form in the app

Device checklist — training day

  • Android 8.0 or newer; 2 GB RAM; ~60 MB free plus 500 MB for photos
  • Location on, mode ‘High accuracy’; app permission ‘While using’
  • Date and time on ‘Automatic’ — a wrong clock becomes a QA signal
  • Exclude the app from battery saver / optimisation so background sync isn’t stopped
  • Mock-location app set to ‘None’ in Developer options
  • Camera permission granted; lens clean
  • Full charge; a power bank helps for an 8-hour shift
  • Latest app version; the SIM that received the invite OTP is in the same phone
Sample signals · 5 location states

Five states. One count you can trust.

Every submission lands in one of these five, and only “in area” records make up the approved number. The rest aren't deleted — they stay, with evidence, in review, in alerts or in a separate “unclear” count.

FAQ

Offline work, GPS, XLSForm, seats and QA — the questions that come up in every demo.

Does the offline survey app really work with no internet at all?

Yes. Once the form, area and map are downloaded, surveys can be filled all day without a network. Every section is saved to an encrypted local database and survives the app closing or the phone restarting. Sync happens whenever there is signal, even at night at home. Acceptance test: an 8-hour field session, 100 surveys, and no confirmed save lost across retries.

What is the difference between GPS geofencing and GPS verification?

Geofencing only asks whether a point is inside a circle, and usually blocks the survey if it isn't. Verification stores evidence with every submission (lat/long, accuracy, fix age, mock flag), sorts it into five states — in area, near boundary, outside, weak signal, fake GPS — and adds only ‘in area’ records to the approved count. Because the evidence stays on the record, you can audit it later.

How accurate is the geofencing?

As accurate as the boundary data behind it. Districts, assembly and Lok Sabha seats use open polygons; villages and wards use an estimated centroid and radius. That is why the badge says ‘approximately in area’, why only clearly distant records (say 14 km) get flagged ‘outside area’, and why edge cases go to review as ‘near boundary’. Android accuracy is an estimate, not proof, and we show it that way.

What is XLSForm, and will my Kobo, ODK or SurveyCTO forms work?

XLSForm is an Excel-based standard: survey, choices and settings sheets hold questions, options, skip logic (relevant), validation (constraint) and multilingual labels. Kobo, ODK and SurveyCTO all run on it. Bharat Survey imports XLSForms directly and lists anything unsupported line by line in the import report. You can also export your form back to XLSForm.

Does the form builder support Hindi?

Yes. Questions, options, error messages and instructions can be in Hindi and English, with a one-tap language toggle in the app. XLSForm label::hi and label::en columns are supported, and columns for other Indian languages can be added.

How much battery does live tracking use, and what about privacy?

Tracking runs only during a shift, after the volunteer taps ‘Start shift’, with a persistent notification — roughly every 30–60 seconds while moving, less often when still. It stops at ‘End shift’. No background tracking (Play Store policy). Leaders see locations only for shift time, and voters or respondents are never tracked. The battery figure is a test target, measured in the pilot.

With seat-based licensing, do supervisors and viewers need a seat?

No. A seat is needed only by a named person who fills surveys in the field. Owners, Admins, Viewers and supervisors who only review are seat-free. A supervisor who also fills surveys takes a seat. Swapping an old volunteer for a new one is a replacement (no charge); going from 10 to 11 is an upgrade.

What does the survey QA checklist check automatically?

Location state (5 categories), interview length against the speed limit, time per question, duplicates (house label + location + answer pattern), contradictory answers, impossible time or distance sequences, repeated patterns and the mock-location flag. The signals add up to a 0–100 risk score; suspicious records go to review and the rest are approved automatically. Supervisors can send records back or assign independent back-checks.

If I edit data in Google Sheets, does the main data change?

No. Sheets is a reporting copy with a one-way sync (Overview, Area, Quality, Team, Issues). The core records live in our database, and the app and dashboard keep running even if Sheets is down or over quota. Full data exports to CSV, Excel and PDF.

How does photo proof work — do we have to photograph faces?

Photo questions capture a public problem (a drain, a road, a hand pump) or a shop or facility from the camera; faces are not the default and never without consent. Photos are compressed on the phone (5 MB → ~200 KB), uploaded with location and time metadata, and shown in reports through signed URLs.

Which Android phones will the survey app run on — cheap ones too?

Android 8.0 or newer with 2 GB RAM and about 60 MB free space is enough; the app is native Kotlin/Compose, with no heavy webview. Forms are tested up to 300 questions and 10 photos per survey. For fieldwork: location on ‘High accuracy’, date and time on ‘Automatic’, the app excluded from battery saver, and mock location off. There is no iOS app in v1.

If the phone switches off or the battery dies mid-survey, is data lost?

No. Each section autosaves to an encrypted local database as soon as it is complete. Switch the phone back on, open the app, and the same survey continues where it stopped. Records already submitted stay in the ‘safe on phone’ count and reach the server when there is signal — with the same UUID, so no duplicates are created.

Can a survey app with skip logic build a household roster (repeat group)?

Yes. A repeat group creates a roster such as ‘these 6 questions for each household member’, with a maximum. Relevance makes the next question depend on earlier answers, cascading selects narrow district → block → panchayat, and piping carries an earlier answer (like a member’s name) into later question text. Exports put each repeat group on its own sheet.

Can one volunteer log in on two phones, or two people share a seat?

No. 1 seat = 1 named person = 1 authorised device. To change phones, deactivate the old device in the panel and authorise the new one — the seat stays the same, and it counts as a replacement, not an upgrade. The rule is enforced on the server, so changing app settings cannot get around it.

Is there an API or integration with other software?

In v1, data leaves as CSV, Excel, PDF and a one-way Google Sheets copy, and forms move in and out as XLSForm (migration from Kobo, ODK, SurveyCTO). A public API is planned for a later version — we don’t list it as available yet. Every export is recorded in the audit log: who, when and what.

If Google Sheets goes down or hits its quota, do surveys stop?

No. Sheets is only a copy of the reports; the core data stays in our database. If Sheets fails, the app, sync, QA queue and dashboard carry on as before, and reports honestly show an older ‘last Sheets sync’ time. When Sheets comes back, the copy refreshes on its own.

शाम के समय कस्बे का हवाई दृश्य
India Nationwide, Hindi-first

In 20 minutes we show you a setup for your assembly seat, ward or project — XLSForm import, seats, the offline app and the live dashboard.