convert 1099 pdf to json1099 pdf to json1099 JSON extraction

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.

Ready to automate document parsing?

Try 1099 Parser free - no credit card required.