Convert 1099 PDF to JSON: A Step-by-Step Guide with Code Examples
February 1, 2026
Why Convert 1099 PDFs to JSON?
PDF is a presentation format. JSON is a data format. The moment you convert a 1099 PDF to JSON, you unlock everything downstream: database storage, tax software import, financial analysis, reconciliation pipelines, and automated reporting.
If you're building any kind of tax tool, financial application, or accounting workflow, you need your 1099 data in structured form. JSON is the universal currency of data interchange—and 1099 PDFs need to be converted into it.
The Challenge: 1099s Aren't Just Text
Converting a 1099 PDF to JSON is harder than it sounds:
- Many 1099s are scanned images, not text-based PDFs
- Even text-based PDFs have inconsistent layouts by issuer
- Box numbers and their meanings change by form type
- You need semantic understanding, not just text extraction
A simple PDF text extractor gives you a wall of unstructured text. You need something that understands what each field means—what Box 1 on a 1099-NEC vs. a 1099-INT actually represents—and maps it to the correct JSON key.
Using the 1099 Parser API to Convert PDFs to JSON
cURL
curl -X POST https://1099parser.com/api/extract \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@1099-nec.pdf"
Python
import requests
def convert_1099_to_json(pdf_path, api_key):
with open(pdf_path, 'rb') as f:
response = requests.post(
'https://1099parser.com/api/extract',
headers={'Authorization': 'Bearer ' + api_key},
files={'file': f}
)
return response.json()
result = convert_1099_to_json('1099-nec-2025.pdf', 'your-api-key')
print("Form type:", result['form_type'])
print("Compensation:", result.get('box1_nonemployee_compensation'))
JavaScript / Node.js
const FormData = require('form-data');
const fs = require('fs');
const fetch = require('node-fetch');
async function convert1099ToJSON(pdfPath, apiKey) {
const form = new FormData();
form.append('file', fs.createReadStream(pdfPath));
const response = await fetch('https://1099parser.com/api/extract', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + apiKey,
...form.getHeaders()
},
body: form
});
return response.json();
}
convert1099ToJSON('1099-div.pdf', process.env.PARSER_API_KEY)
.then(data => console.log(JSON.stringify(data, null, 2)));
Sample JSON Output: All Major 1099 Types
1099-NEC (Nonemployee Compensation)
{
"form_type": "1099-NEC",
"tax_year": 2025,
"payer_name": "Digital Agency LLC",
"payer_tin": "47-1234567",
"recipient_name": "Taylor Kim",
"recipient_tin_last4": "9821",
"box1_nonemployee_compensation": 35000.00,
"box4_federal_tax_withheld": 0.00,
"state_info": [{"state": "NY", "state_income": 35000.00, "state_tax_withheld": 0.00}]
}
1099-MISC (Miscellaneous Income)
{
"form_type": "1099-MISC",
"tax_year": 2025,
"payer_name": "Property Partners LP",
"payer_tin": "88-7654321",
"recipient_name": "Alex Johnson",
"recipient_tin_last4": "5544",
"box1_rents": 18000.00,
"box3_other_income": 0.00,
"box4_federal_tax_withheld": 0.00
}
1099-INT (Interest Income)
{
"form_type": "1099-INT",
"tax_year": 2025,
"payer_name": "First Federal Savings",
"payer_tin": "52-0987654",
"recipient_name": "Sam Patel",
"recipient_tin_last4": "7712",
"box1_interest_income": 2341.88,
"box4_federal_tax_withheld": 0.00,
"box8_tax_exempt_interest": 500.00
}
1099-R (Retirement Distributions)
{
"form_type": "1099-R",
"tax_year": 2025,
"payer_name": "Fidelity Investments",
"payer_tin": "04-3456789",
"recipient_name": "Patricia Nguyen",
"recipient_tin_last4": "3318",
"box1_gross_distribution": 25000.00,
"box2a_taxable_amount": 25000.00,
"box4_federal_tax_withheld": 5000.00,
"box7_distribution_code": "7"
}
Bulk Conversion: Convert Many 1099 PDFs to JSON at Once
import requests
import zipfile
from pathlib import Path
def batch_convert_1099s(pdf_folder, api_key):
zip_path = '/tmp/1099-batch.zip'
with zipfile.ZipFile(zip_path, 'w') as zf:
for pdf in Path(pdf_folder).glob('*.pdf'):
zf.write(pdf, pdf.name)
with open(zip_path, 'rb') as f:
response = requests.post(
'https://1099parser.com/api/extract/batch',
headers={'Authorization': 'Bearer ' + api_key},
files={'files': f}
)
return response.json()
results = batch_convert_1099s('./client-1099s/', 'your-api-key')
print("Processed", len(results['results']), "forms")
Start Converting for Free
1099 Parser includes 3 free extractions with no credit card required—enough to validate the output against your actual documents. Paid plans start at $9 for 10 forms. No subscriptions, credits never expire.