Data preparation

Prepare your Excel data.

doctagd reads each row of your spreadsheet and produces one Word document per row by default. A few simple structural choices in Excel make every later step easier - mapping, grouping, bullets, filenames.

Header row

Row 1 is your headers. Headers must be unique and stable - we match them to placeholders.

One row, one doc

By default each Excel row becomes one Word document. Group rows when several belong to one record.

We detect patterns

Sparse-fill, full-repeat, and delimited values are auto-detected and offered as one-click suggestions.

Header row and naming

Keep header names short, unique, and consistent across re-runs. Matching the headers to your Word placeholder names (eg. client_name) removes the mapping step entirely on the next upload of the same shape.

Good headers
client_name | agreement_date | total_fee | payment_terms
Acme Ltd    | 14 May 2026    | 4800        | Net 30
Northline   | 22 May 2026    | 7200        | Net 14

One row per document

The default behaviour: each Excel row produces one populated .docx. Multiple rows return a zip. Use this for service agreements, certificates, access requests - anything where the document is self-contained.

Each row becomes a separate file
service-agreement-Acme Ltd.docx
service-agreement-Northline.docx
service-agreement-Globex.docx

Grouped output (parent + line items)

For invoices, quotes, packing slips, or anything with line items, pick an ID column. Rows sharing the same ID become one document with a header section and a line-item table. In Mode A you wrap line-item placeholders in {#items}…{/items}; in Quick mode the grouping suggestion card sets it up for you.

Two parent records, four line items
order_id | item       | qty | price
1001     | Keyboard   | 1   | 89.00
1001     | Mouse      | 2   | 24.00
1002     | Monitor    | 1   | 320.00
1002     | USB hub    | 1   | 38.00

# Pick order_id as the ID column → 2 documents

Sparse-fill (Shopify style)

Export tools like Shopify only fill the ID column on the first row of each group, leaving the rest blank. Don't repeat the parent value yourself - doctagd detects the pattern and treats the blanks as "continues the previous record".

Leave the blanks alone
order_id | item       | qty
1001     | Keyboard   | 1
         | Mouse      | 2
         | Wrist rest | 1
1002     | Monitor    | 1
         | USB hub    | 1

Full-repeat (HubSpot style)

Some exports repeat the parent fields on every line item row. That is also fine - we detect it and offer to collapse the duplicate columns into the header section automatically.

Parent fields repeat across line item rows
deal_id | client | stage    | item       | price
A-1     | Acme   | Closed   | Setup fee  | 1200
A-1     | Acme   | Closed   | Retainer   | 4800
A-2     | Globex | Closed   | Setup fee  | 1500

Delimited cells

Form-response exports tend to pack several values into one cell separated by commas, semicolons, or new lines. The delimited suggestion turns those into a bullet list in the output. Newlines always trigger it; commas / semicolons trigger when the column is consistently multi-value.

One cell, three bullets
Services
Strategy, Implementation, Support

# Output:
#   • Strategy
#   • Implementation
#   • Support

Hard limits

The server enforces these regardless of plan, to keep generation fast and predictable.

500 rows per upload

Split larger spreadsheets into batches - the API supports multiple runs against the same saved config.

80 columns

Wide exports rarely matter to a Word document - prune the irrelevant columns before upload.

10,000 characters per cell

Trim oversized free-text fields - long answers belong in a separate document, not a placeholder.

8 MB per output, 80 MB per zip

Very rich templates with embedded images can hit the per-doc cap. Reduce image sizes in the template if you see a payload-too-large error.

Next: prepare your Word template, or skip the template and use Quick mode.