Data extraction from any document, into clean rows
PDFs, invoices, emails, web pages — agents extract the fields you define and write them where they belong, flagging anything they are not sure about.
What this actually involves
| The job | PDFs, invoices, emails, web pages — agents extract the fields you define and write them where they belong, flagging anything they are not sure about. |
|---|---|
| Tools it needs | Google Drive, Dropbox, Google Sheets, Airtable, PostgreSQL |
| Setup | 4 steps, about ten minutes |
| Runs when | Something happens in Google Sheets |
| Approval | Yours, per category — nothing is sent on your behalf unless you say so |
| Where it runs | Your own machine. Credentials stay in a local vault. |
What the agent actually does
Clean rows, and a flag on anything uncertain
Scanned PDFs, email bodies, spreadsheets that were never designed to be parsed, web pages, attachments in formats a vendor invented years ago. The agent reads for meaning, so a new supplier’s layout does not require a new parser.
Your schema
You define the fields and their types; the agent fills them. Where a value needs deriving rather than copying — a total that must be computed, a date in an ambiguous format — it does the work and records how it arrived at the answer.
Uncertainty is flagged, not hidden
Anything the agent is unsure about is marked for review rather than guessed. A field flagged low-confidence costs somebody five seconds; a field silently wrong costs a great deal more, much later.
The tools this job needs
Google Drive
Where the work arrives. Where the documents live — and pile up. The agent watches it and reads what turns up in full, rather than matching a rule against a subject line.
Dropbox
Context the agent pulls in before deciding. Shared files that arrive needing processing. It is read, not just referenced — which is what lets the decision account for it.
Google Sheets
Context the agent pulls in before deciding. The database every team already has open. It is read, not just referenced — which is what lets the decision account for it.
Airtable
Where the result lands. Structured records with an API worth automating. Nothing is written here until the agent has formed a view and, where you asked for it, you have approved it.
Get this agent
Document Extractor
PDFs, invoices, emails, web pages — agents extract the fields you define and write them where they belong, flagging anything they are not sure about.
Runs on your own machine. Asks for Google Drive, Google Sheets and nothing else — you approve the connection, and the agent inherits whichever AI model you already use.
You can see exactly what it did
Why template parsers keep breaking
Traditional extraction encodes positions and patterns: the total is in the box at these coordinates, the reference matches this expression. It works beautifully for the documents it was built against and fails on the next supplier, the next redesign, the next scanned copy that arrived slightly rotated. Maintenance grows with the number of sources, which is exactly backwards from what you want.
Reading for meaning changes the maintenance curve
An agent locates the invoice total because it understands what an invoice total is, not because it knows where the last one was printed. New formats generally work on the first attempt, and the ones that do not are handled by improving a description rather than writing another parser. The cost of adding the fiftieth source is roughly the cost of adding the second.
Confidence is the feature that makes it usable
The reason extraction pipelines get abandoned is rarely accuracy in aggregate — it is that nobody can tell which rows to trust. An agent that reports per-field confidence turns the output into something a person can work with: accept the clean rows, spend attention only on the flagged ones, and watch the flagged proportion fall as the descriptions improve.
Build it in AGNT
- Connect the source — Gmail, Drive, Dropbox, or a folder the documents land in.
- Define your fields in plain language, including what makes a value suspicious.
- Choose the destination: Google Sheets, Airtable, PostgreSQL, or your own system by API.
- Run a batch of real documents, check the flagged rows, and tighten the field descriptions.
Copy this workflow
The build is smaller than it sounds. One trigger, one agent that reads and decides, one action — and a recorded outcome either way, including the times it decides to leave something alone.
{
"id": "12588c7a-ba6f-48f3-ad2f-9b4367dc55e6",
"name": "Data extraction from any document, into clean rows",
"nodes": [
{
"id": "4adc892c-55d8-4e93-a533-8ce3107335fe",
"text": "Watch Google Sheets",
"x": 512,
"y": 144,
"isEditing": false,
"type": "google-sheets-new-row",
"icon": "connect",
"category": "trigger",
"isSelected": false,
"parameters": {},
"description": "Listen for new rows added to a specified Google Sheet and trigger the workflow when a new row is detected.",
"error": null,
"isActive": false,
"output": null,
"outputs": {}
},
{
"id": "b769d4eb-7988-4dfd-a804-d5aed4c910b6",
"text": "Read it and decide",
"x": 512,
"y": 336,
"isEditing": false,
"type": "agnt-agent",
"icon": "connect",
"category": "action",
"isSelected": false,
"parameters": {
"instructions": "Scanned PDFs, email bodies, spreadsheets that were never designed to be parsed, web pages, attachments in formats a vendor invented years ago. The agent reads for meaning, so a new supplier’s layout does not require a new parser."
},
"description": "PDFs, invoices, emails, web pages — agents extract the fields you define and write them where they belong, flagging anything they are not sure about.",
"error": null,
"isActive": false,
"output": null,
"outputs": {}
},
{
"id": "78afe873-b983-4de0-ae7d-bec78dd9c394",
"text": "Act in Google Drive",
"x": 512,
"y": 528,
"isEditing": false,
"type": "google-drive-api",
"icon": "connect",
"category": "action",
"isSelected": false,
"parameters": {
"action": "LIST_FILES"
},
"description": "Interact with Google Drive to perform various operations on files and folders.",
"error": null,
"isActive": false,
"output": null,
"outputs": {}
}
],
"edges": [
{
"id": "132fb636-0d4a-4d95-aa28-759be40bf8fa",
"start": {
"id": "4adc892c-55d8-4e93-a533-8ce3107335fe",
"type": "output"
},
"end": {
"id": "b769d4eb-7988-4dfd-a804-d5aed4c910b6",
"type": "input"
},
"startX": 800,
"startY": 168,
"endX": 512,
"endY": 360
},
{
"id": "a59445fc-0637-4684-af00-1d841a6d9cd4",
"start": {
"id": "b769d4eb-7988-4dfd-a804-d5aed4c910b6",
"type": "output"
},
"end": {
"id": "78afe873-b983-4de0-ae7d-bec78dd9c394",
"type": "input"
},
"startX": 800,
"startY": 360,
"endX": 512,
"endY": 552
}
],
"zoomLevel": 1,
"canvasOffsetX": 0,
"canvasOffsetY": 0,
"isTinyNodeMode": false
}
Get this running today
Free, local, and it asks for Google Drive, Dropbox, Google Sheets, Airtable, PostgreSQL and nothing else.
Common questions
Does it work on scanned documents?
Yes. Scans and photographs are handled through vision-capable models, including the awkward cases of skewed pages and mixed print and handwriting.
What happens to a field it cannot find?
It is returned empty and flagged, never invented. An honest gap is recoverable; a plausible fabrication in a financial system is not.
Can it validate as well as extract?
Yes — cross-checks like "line items must sum to the stated total" are exactly the kind of rule worth adding, and failures become exceptions for a human rather than silent bad data.