DEV Community

Cover image for How to Batch Fill 100+ PDF Forms from an Excel or CSV File (Without Acrobat Mail Merge Plugins)
Maciej S.
Maciej S.

Posted on Fully Autonomous

How to Batch Fill 100+ PDF Forms from an Excel or CSV File (Without Acrobat Mail Merge Plugins)

Every operations, HR, finance, and legal team eventually hits the same bottleneck: you have an Excel workbook (.xlsx) or .csv export with 30, 80, or 200 rows of clean data—and an official PDF form that needs one populated file generated per row.

When you look for a built-in "Mail Merge to PDF" button, you quickly discover why this workflow frustrates so many teams:

  1. Microsoft Word Mail Merge only works on .docx layouts you built yourself. It cannot populate an existing third-party, government, or client PDF template without destroying the layout.
  2. Adobe Acrobat Pro has no native multi-row Excel mail merge. Inside Acrobat (Tools → Prepare Form → More → Import Data), you can only import one row at a time from a tab-delimited .txt or .fdf file. Generating 120 PDFs from an Excel sheet in Acrobat requires either buying Windows-only third-party plugins (such as AutoMailMerge), writing custom Acrobat Action Wizard JavaScript (this.importTextData()), or handing the task to an engineer.
  3. Many "PDF forms" aren't actually fillable. If the template was exported from Word or scanned from paper, it has zero interactive /AcroForm fields—meaning any mail-merge tool will see 0 mappable boxes until interactive fields are added.

This guide walks through the complete, repeatable workflow for turning an Excel or CSV spreadsheet into 100+ populated PDFs—covering how to convert flat PDFs into fillable templates first, how to format your spreadsheet so checkboxes and leading zeros don't break, and how to preview and download a full batch in the browser.


Step 1: Verify Whether Your PDF Template Is Fillable or Flat

Before mapping spreadsheet columns, open your blank PDF template and click inside one of the input areas:

  • Interactive (AcroForm) PDF: Clicking an input box highlights a blue or purple text field or toggles a checkbox. Each box has an internal field name (for example, vendor_name, ein, or f1_01[0]) that a batch tool can target directly.
  • Flat PDF: Clicking the line or box only selects static text or does nothing at all. The lines (________) and ballot boxes (☐) are just drawn onto the page stream.

Fixing a Flat PDF or Word (.docx) Template Before Batch Filling

If your template has no interactive fields, you only need to add them once before running your 100-row batch:

  • Starting from a flat or scanned PDF: Upload the blank document to the Convert PDF to Fillable Form tool. It detects input lines, boxes, and checkboxes on the page so you can review the field boundaries, give them clear names (full_name, start_date, department), and export a reusable interactive AcroForm PDF.
  • Starting from a Microsoft Word (.docx) form: When you export a Word document using Save As PDF or Microsoft Print to PDF, Word flattens Content Controls into dead text lines. Instead of redrawing every box by hand in Acrobat Prepare Form, run the document through the Word to Fillable PDF converter to preserve interactive fields that match your spreadsheet columns.

Step 2: Prepare Your Excel (.xlsx) or CSV File for Clean Mapping

Most batch PDF errors come from silent spreadsheet formatting quirks rather than the PDF itself. Before uploading a 50-row or 200-row sheet, run through four quick checks:

Spreadsheet Issue What Goes Wrong in the Output PDF How to Fix It in Excel / CSV
Leading zeros in ZIP codes, EINs, or IDs New England ZIP codes (02110), employee IDs (00419), or EINs (04-2194810) drop the leading 0 when Excel formats the column as General or Number. Format ZIP, SSN/EIN, and ID columns explicitly as Text before saving, or export as CSV with quoted strings ("02110").
Title banners or summary rows A decorative title in Row 1 ("Q4 Onboarding Roster") prevents the parser from reading Row 3 as the actual column header row, and a bottom TOTAL row generates a junk PDF. Keep Row 1 strictly as column headers (full_name, email, start_date) and Rows 2..N strictly as records—one row per output PDF.
Checkbox & radio button values A single column with values like "LLC" won't automatically check a dedicated "LLC" checkbox if the PDF uses separate boolean checkboxes for each entity type. Use Yes / No (or true / false, X / blank) for individual checkbox columns, or match the PDF's radio choice value.
Identical output filenames Without a unique identifier column, 150 generated PDFs end up named document_1.pdf through document_150.pdf, forcing someone to open every file to see whose packet it is. Include a clean file_name, employee_id, or vendor_name column so each output PDF in the ZIP archive is named clearly.

Example Clean Spreadsheet Structure (onboarding_roster.csv)

record_id,full_name,email,department,start_date,postal_code,direct_deposit_enrolled,exempt_status
EMP-1041, Elena Rostova,elena.rostova@northwind.example,Operations,2026-11-03,02110,Yes,No
EMP-1042,Marcus Vance,marcus.vance@northwind.example,Finance,2026-11-03,07030,Yes,Yes
EMP-1043,Priya Nair,priya.nair@northwind.example,Legal Ops,2026-11-10,94105,No,No
Enter fullscreen mode Exit fullscreen mode

Step 3: Three High-Volume B2B Workflows (25 to 200+ Rows)

Across operations, accounting, HR, and compliance teams, three batch PDF patterns account for the majority of spreadsheet-to-PDF workloads:

1. Finance & AP: Vendor IRS Form W-9 & Compliance Packets

When Accounts Payable or procurement teams migrate ERPs, onboard seasonal contractors, or prepare for 1099 season, they often have an Excel export of 30 to 150 vendor entities (legal_name, dba_name, federal_tax_classification, llc_tax_code, street_address, city_state_zip, ein_or_ssn) that need pre-populated W-9 forms sent for signature.

Official IRS fw9.pdf files use non-obvious internal field names inside an XFA/AcroForm hierarchy (topmostSubform[0].Page1[0].f1_01[0] for Line 1 Name, f1_02[0] for Line 2 Business Name, and c1_1[0] through c1_1[6] for the federal tax classification checkboxes).

2. HR, Staffing & Education: Batch Employee Onboarding & Roster Packets

When HR teams, staffing agencies, or school and municipal administrators onboard a cohort of 25 to 200+ people, the same core roster columns (first_name, last_name, ssn_or_id, home_address, emergency_contact_name, emergency_contact_phone, job_title, pay_rate, effective_date) have to be entered across multiple PDF forms—state withholding certificates, direct deposit authorizations, equipment sign-out sheets, and benefits enrollment forms.

Instead of copying and pasting row by row from Google Sheets or Excel into Adobe Reader:

3. General Operations & Legal: Excel/CSV to PDF Mail Merge for Any Custom Form

For certificates of completion, HOA/property management notices, lease addenda, permit applications, and client intake packets:

  1. Open the browser-based Fill PDF from Excel workflow or PDF Mail Merge tool.
  2. Upload your PDF template (either an existing fillable AcroForm PDF or a flat PDF where fields are detected automatically).
  3. Upload your .xlsx or .csv spreadsheet (from a 5-row test sample up to a 200-row production roster).
  4. Verify column-to-field mappings and preview rows: Columns with matching names (Full Name ↔ full_name, ZIP Code ↔ zip_code) map automatically, and you can manually bind any cryptic PDF field names (f1_04, Text12) using a visual dropdown while stepping through live PDF previews for Row 1, Row 2, and Row 3.
  5. Export the batch ZIP: Download a single .zip archive containing one populated PDF per spreadsheet row.

Bonus for Technical Ops: Inspecting Cryptic PDF Field Names with Python (pypdf)

If you are preparing a standardized CSV template for your operations team and want to see the exact internal /T field names and checkbox /AP (Appearance Dictionary) states inside an agency or vendor PDF, you can run this 30-line Python diagnostic using pypdf:

#!/usr/bin/env python3
"""List all interactive AcroForm fields, types, tooltips, and checkbox states in a PDF."""
import json
import sys
from pypdf import PdfReader


def inspect_pdf_fields(pdf_path: str) -> list[dict]:
    reader = PdfReader(pdf_path)
    fields = reader.get_fields() or {}
    summary = []

    for full_name, field in fields.items():
        field_type = field.get("/FT", "Unknown")
        tooltip = field.get("/TU", "")
        # Extract valid on-states for checkboxes/radio buttons (/Btn)
        states = list(field.get("/_States_", [])) if "/_States_" in field else []
        summary.append(
            {
                "field_name": full_name,
                "type": str(field_type),
                "tooltip": str(tooltip),
                "states": [ str(s) for s in states if str(s) != "/Off" ],
            }
        )
    return summary


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python inspect_fields.py <template.pdf>")
        sys.exit(1)
    print(json.dumps(inspect_pdf_fields(sys.argv[1]), indent=2))
Enter fullscreen mode Exit fullscreen mode

Running this on a blank PDF immediately tells you:

  • Whether the PDF actually contains interactive fields (if get_fields() returns {} on a multi-page form, the PDF is flat and needs field reconstruction via Convert PDF to Fillable Form first).
  • What human-readable /TU tooltips correspond to opaque field IDs like f1_01[0].
  • What non-/Off state strings (/1, /Yes, /On) checkboxes expect.

Pre-Flight Checklist Before Generating 100+ PDFs

Before sending a generated batch to clients, employees, or an agency portal:

  1. Preview the longest text row: Find the row in your Excel sheet with the longest company name or street address and preview that specific record first to make sure text does not clip against narrow box boundaries.
  2. Verify checkbox states in two viewers: Spot-check 2–3 generated PDFs in both Chrome/Edge and macOS Preview or Adobe Reader to confirm checkboxes and radio buttons render visibly across viewers.
  3. Check leading zeros on a sample row: Confirm that ZIP codes starting with 0 and tax IDs retained their exact formatting after the Excel/CSV import.

If you want to test the full spreadsheet-to-PDF workflow in your browser without writing a script or installing Acrobat plugins, you can try a sample batch on Fill PDF from Excel or PDF Mail Merge.

Disclosure: I am the solo developer of JustFill.

AI disclosure: AI coding agents drafted and revised this article and verified the code examples above.

Top comments (0)