Generate XLSX, CSV, and Markdown spreadsheets from structured JSON
Generate XLSX, CSV, and Markdown tables from structured JSON with formulas, styling, and formatting.
See Sheet Generation in action
Start from a real implementation pattern, not blank docs. See the input, runnable code, and structured output your workflow can use next.
{
"format": "xlsx",
"styles": {
"header": {
"is_bold": true,
"background_color": "#4472C4",
"font_color": "#FFFFFF"
}
},
"sheets": [
{
"name": "FY2026 Pipeline",
"columns": [
{ "name": "Region", "width": 18 },
{ "name": "Account Executive", "width": 24 },
{ "name": "Plan", "width": 18 },
{ "name": "Stage", "width": 16 },
{ "name": "ARR", "width": 16 },
{ "name": "Renewal", "width": 16 }
],
"rows": [
[{ "value": "Germany" }, { "value": "Mia Fischer" }, { "value": "Enterprise" }, { "value": "Contract" }, { "value": 182000, "format": "currency", "currency_code": "EUR" }, { "value": "2026-11-30", "format": "date" }],
[{ "value": "France" }, { "value": "Lucas Moreau" }, { "value": "Growth" }, { "value": "Security Review" }, { "value": 96000, "format": "currency", "currency_code": "EUR" }, { "value": "2026-09-15", "format": "date" }],
[{ "value": "Spain" }, { "value": "Sofia Ramos" }, { "value": "Growth" }, { "value": "Negotiation" }, { "value": 74000, "format": "currency", "currency_code": "EUR" }, { "value": "2026-10-04", "format": "date" }],
[{ "value": "Netherlands" }, { "value": "Ava Thompson" }, { "value": "Enterprise" }, { "value": "Pilot" }, { "value": 265000, "format": "currency", "currency_code": "EUR" }, { "value": "2026-12-20", "format": "date" }],
[{ "value": "Italy" }, { "value": "Noah Bennett" }, { "value": "Startup" }, { "value": "Proposal" }, { "value": 42000, "format": "currency", "currency_code": "EUR" }, { "value": "2026-08-05", "format": "date" }],
[{ "value": "Poland" }, { "value": "Camila Ortiz" }, { "value": "Growth" }, { "value": "Qualified" }, { "value": 58000, "format": "currency", "currency_code": "EUR" }, { "value": "2026-09-21", "format": "date" }],
[{ "value": "Austria" }, { "value": "Ethan Tan" }, { "value": "Enterprise" }, { "value": "Procurement" }, { "value": 118000, "format": "currency", "currency_code": "EUR" }, { "value": "2026-10-12", "format": "date" }],
[{ "value": "Sweden" }, { "value": "Chloe Walsh" }, { "value": "Growth" }, { "value": "Discovery" }, { "value": 64000, "format": "currency", "currency_code": "EUR" }, { "value": "2026-07-28", "format": "date" }],
[{ "value": "Belgium" }, { "value": "Haruto Sato" }, { "value": "Enterprise" }, { "value": "Legal" }, { "value": 143000, "format": "currency", "currency_code": "EUR" }, { "value": "2026-11-08", "format": "date" }],
[{ "value": "Denmark" }, { "value": "Min Seo Park" }, { "value": "Growth" }, { "value": "Demo" }, { "value": 51000, "format": "currency", "currency_code": "EUR" }, { "value": "2026-08-19", "format": "date" }]
]
}
]
}
| Region | Account Executive | Plan | Stage | ARR | Renewal |
|---|---|---|---|---|---|
| Germany | Mia Fischer | Enterprise | Contract | EUR 182,000 | 2026-11-30 |
| France | Lucas Moreau | Growth | Security Review | EUR 96,000 | 2026-09-15 |
| Spain | Sofia Ramos | Growth | Negotiation | EUR 74,000 | 2026-10-04 |
| Netherlands | Ava Thompson | Enterprise | Pilot | EUR 265,000 | 2026-12-20 |
| Italy | Noah Bennett | Startup | Proposal | EUR 42,000 | 2026-08-05 |
| Poland | Camila Ortiz | Growth | Qualified | EUR 58,000 | 2026-09-21 |
| Austria | Ethan Tan | Enterprise | Procurement | EUR 118,000 | 2026-10-12 |
| Sweden | Chloe Walsh | Growth | Discovery | EUR 64,000 | 2026-07-28 |
| Belgium | Haruto Sato | Enterprise | Legal | EUR 143,000 | 2026-11-08 |
| Denmark | Min Seo Park | Growth | Demo | EUR 51,000 | 2026-08-19 |
curl -X POST \
https://api.iterationlayer.com/sheet-generation/v1/generate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"format": "xlsx",
"styles": {
"header": {
"is_bold": true,
"background_color": "#4472C4",
"font_color": "#FFFFFF"
}
},
"sheets": [
{
"name": "FY2026 Pipeline",
"columns": [
{
"name": "Region",
"width": 18
},
{
"name": "Account Executive",
"width": 24
},
{
"name": "Plan",
"width": 18
},
{
"name": "Stage",
"width": 16
},
{
"name": "ARR",
"width": 16
},
{
"name": "Renewal",
"width": 16
}
],
"rows": [
[
{
"value": "Germany"
},
{
"value": "Mia Fischer"
},
{
"value": "Enterprise"
},
{
"value": "Contract"
},
{
"value": 182000,
"format": "currency",
"currency_code": "EUR"
},
{
"value": "2026-11-30",
"format": "date"
}
],
[
{
"value": "France"
},
{
"value": "Lucas Moreau"
},
{
"value": "Growth"
},
{
"value": "Security Review"
},
{
"value": 96000,
"format": "currency",
"currency_code": "EUR"
},
{
"value": "2026-09-15",
"format": "date"
}
],
[
{
"value": "Netherlands"
},
{
"value": "Ava Thompson"
},
{
"value": "Enterprise"
},
{
"value": "Pilot"
},
{
"value": 265000,
"format": "currency",
"currency_code": "EUR"
},
{
"value": "2026-12-20",
"format": "date"
}
],
[
{
"value": "Italy"
},
{
"value": "Noah Bennett"
},
{
"value": "Startup"
},
{
"value": "Proposal"
},
{
"value": 42000,
"format": "currency",
"currency_code": "EUR"
},
{
"value": "2026-08-05",
"format": "date"
}
],
[
{
"value": "Austria"
},
{
"value": "Ethan Tan"
},
{
"value": "Enterprise"
},
{
"value": "Procurement"
},
{
"value": 118000,
"format": "currency",
"currency_code": "EUR"
},
{
"value": "2026-10-12",
"format": "date"
}
],
[
{
"value": "Sweden"
},
{
"value": "Chloe Walsh"
},
{
"value": "Growth"
},
{
"value": "Discovery"
},
{
"value": 64000,
"format": "currency",
"currency_code": "EUR"
},
{
"value": "2026-07-28",
"format": "date"
}
]
]
}
]
}'
{
"success": true,
"data": {
"buffer": "UEsDBBQAAAAIAA...",
"mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
}
}
import { IterationLayer } from "iterationlayer";
const client = new IterationLayer({
apiKey: "YOUR_API_KEY",
});
const result = await client.generateSheet({
format: "xlsx",
styles: {
header: {
is_bold: true,
background_color: "#4472C4",
font_color: "#FFFFFF",
},
},
sheets: [
{
name: "FY2026 Pipeline",
columns: [
{
name: "Region",
width: 18,
},
{
name: "Account Executive",
width: 24,
},
{
name: "Plan",
width: 18,
},
{
name: "Stage",
width: 16,
},
{
name: "ARR",
width: 16,
},
{
name: "Renewal",
width: 16,
},
],
rows: [
[
{
value: "Germany",
},
{
value: "Mia Fischer",
},
{
value: "Enterprise",
},
{
value: "Contract",
},
{
value: 182000,
format: "currency",
currency_code: "EUR",
},
{
value: "2026-11-30",
format: "date",
},
],
[
{
value: "France",
},
{
value: "Lucas Moreau",
},
{
value: "Growth",
},
{
value: "Security Review",
},
{
value: 96000,
format: "currency",
currency_code: "EUR",
},
{
value: "2026-09-15",
format: "date",
},
],
[
{
value: "Spain",
},
{
value: "Sofia Ramos",
},
{
value: "Growth",
},
{
value: "Negotiation",
},
{
value: 74000,
format: "currency",
currency_code: "EUR",
},
{
value: "2026-10-04",
format: "date",
},
],
[
{
value: "Netherlands",
},
{
value: "Ava Thompson",
},
{
value: "Enterprise",
},
{
value: "Pilot",
},
{
value: 265000,
format: "currency",
currency_code: "EUR",
},
{
value: "2026-12-20",
format: "date",
},
],
[
{
value: "Italy",
},
{
value: "Noah Bennett",
},
{
value: "Startup",
},
{
value: "Proposal",
},
{
value: 42000,
format: "currency",
currency_code: "EUR",
},
{
value: "2026-08-05",
format: "date",
},
],
[
{
value: "Poland",
},
{
value: "Camila Ortiz",
},
{
value: "Growth",
},
{
value: "Qualified",
},
{
value: 58000,
format: "currency",
currency_code: "EUR",
},
{
value: "2026-09-21",
format: "date",
},
],
[
{
value: "Austria",
},
{
value: "Ethan Tan",
},
{
value: "Enterprise",
},
{
value: "Procurement",
},
{
value: 118000,
format: "currency",
currency_code: "EUR",
},
{
value: "2026-10-12",
format: "date",
},
],
[
{
value: "Sweden",
},
{
value: "Chloe Walsh",
},
{
value: "Growth",
},
{
value: "Discovery",
},
{
value: 64000,
format: "currency",
currency_code: "EUR",
},
{
value: "2026-07-28",
format: "date",
},
],
[
{
value: "Belgium",
},
{
value: "Haruto Sato",
},
{
value: "Enterprise",
},
{
value: "Legal",
},
{
value: 143000,
format: "currency",
currency_code: "EUR",
},
{
value: "2026-11-08",
format: "date",
},
],
[
{
value: "Denmark",
},
{
value: "Min Seo Park",
},
{
value: "Growth",
},
{
value: "Demo",
},
{
value: 51000,
format: "currency",
currency_code: "EUR",
},
{
value: "2026-08-19",
format: "date",
},
],
],
},
],
});
{
"success": true,
"data": {
"buffer": "UEsDBBQAAAAIAA...",
"mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
}
}
from iterationlayer import IterationLayer
client = IterationLayer(
api_key="YOUR_API_KEY"
)
result = client.generate_sheet(
format="xlsx",
styles={
"header": {
"is_bold": True,
"background_color": "#4472C4",
"font_color": "#FFFFFF",
},
},
sheets=[
{
"name": "FY2026 Pipeline",
"columns": [
{
"name": "Region",
"width": 18,
},
{
"name": "Account Executive",
"width": 24,
},
{
"name": "Plan",
"width": 18,
},
{
"name": "Stage",
"width": 16,
},
{
"name": "ARR",
"width": 16,
},
{
"name": "Renewal",
"width": 16,
},
],
"rows": [
[
{
"value": "Germany",
},
{
"value": "Mia Fischer",
},
{
"value": "Enterprise",
},
{
"value": "Contract",
},
{
"value": 182000,
"format": "currency",
"currency_code": "EUR",
},
{
"value": "2026-11-30",
"format": "date",
},
],
[
{
"value": "France",
},
{
"value": "Lucas Moreau",
},
{
"value": "Growth",
},
{
"value": "Security Review",
},
{
"value": 96000,
"format": "currency",
"currency_code": "EUR",
},
{
"value": "2026-09-15",
"format": "date",
},
],
[
{
"value": "Spain",
},
{
"value": "Sofia Ramos",
},
{
"value": "Growth",
},
{
"value": "Negotiation",
},
{
"value": 74000,
"format": "currency",
"currency_code": "EUR",
},
{
"value": "2026-10-04",
"format": "date",
},
],
[
{
"value": "Netherlands",
},
{
"value": "Ava Thompson",
},
{
"value": "Enterprise",
},
{
"value": "Pilot",
},
{
"value": 265000,
"format": "currency",
"currency_code": "EUR",
},
{
"value": "2026-12-20",
"format": "date",
},
],
[
{
"value": "Italy",
},
{
"value": "Noah Bennett",
},
{
"value": "Startup",
},
{
"value": "Proposal",
},
{
"value": 42000,
"format": "currency",
"currency_code": "EUR",
},
{
"value": "2026-08-05",
"format": "date",
},
],
[
{
"value": "Poland",
},
{
"value": "Camila Ortiz",
},
{
"value": "Growth",
},
{
"value": "Qualified",
},
{
"value": 58000,
"format": "currency",
"currency_code": "EUR",
},
{
"value": "2026-09-21",
"format": "date",
},
],
[
{
"value": "Austria",
},
{
"value": "Ethan Tan",
},
{
"value": "Enterprise",
},
{
"value": "Procurement",
},
{
"value": 118000,
"format": "currency",
"currency_code": "EUR",
},
{
"value": "2026-10-12",
"format": "date",
},
],
[
{
"value": "Sweden",
},
{
"value": "Chloe Walsh",
},
{
"value": "Growth",
},
{
"value": "Discovery",
},
{
"value": 64000,
"format": "currency",
"currency_code": "EUR",
},
{
"value": "2026-07-28",
"format": "date",
},
],
[
{
"value": "Belgium",
},
{
"value": "Haruto Sato",
},
{
"value": "Enterprise",
},
{
"value": "Legal",
},
{
"value": 143000,
"format": "currency",
"currency_code": "EUR",
},
{
"value": "2026-11-08",
"format": "date",
},
],
[
{
"value": "Denmark",
},
{
"value": "Min Seo Park",
},
{
"value": "Growth",
},
{
"value": "Demo",
},
{
"value": 51000,
"format": "currency",
"currency_code": "EUR",
},
{
"value": "2026-08-19",
"format": "date",
},
],
],
},
],
)
{
"success": true,
"data": {
"buffer": "UEsDBBQAAAAIAA...",
"mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
}
}
import il "github.com/iterationlayer/sdk-go"
client := il.NewClient("YOUR_API_KEY")
result, err := client.GenerateSheet(
il.GenerateSheetRequest{
Format: "xlsx",
Styles: &il.SheetStyles{
Header: &il.CellStyle{
IsBold: true,
BackgroundColor: "#4472C4",
FontColor: "#FFFFFF",
},
},
Sheets: []il.Sheet{
{
Name: "FY2026 Pipeline",
Columns: []il.SheetColumn{
{
Name: "Region",
Width: 18,
},
{
Name: "Account Executive",
Width: 24,
},
{
Name: "Plan",
Width: 18,
},
{
Name: "Stage",
Width: 16,
},
{
Name: "ARR",
Width: 16,
},
{
Name: "Renewal",
Width: 16,
},
},
Rows: [][]il.SheetCell{
{
{
Value: "Germany",
},
{
Value: "Mia Fischer",
},
{
Value: "Enterprise",
},
{
Value: "Contract",
},
{
Value: 182000,
Format: "currency",
CurrencyCode: "EUR",
},
{
Value: "2026-11-30",
Format: "date",
},
},
{
{
Value: "France",
},
{
Value: "Lucas Moreau",
},
{
Value: "Growth",
},
{
Value: "Security Review",
},
{
Value: 96000,
Format: "currency",
CurrencyCode: "EUR",
},
{
Value: "2026-09-15",
Format: "date",
},
},
{
{
Value: "Spain",
},
{
Value: "Sofia Ramos",
},
{
Value: "Growth",
},
{
Value: "Negotiation",
},
{
Value: 74000,
Format: "currency",
CurrencyCode: "EUR",
},
{
Value: "2026-10-04",
Format: "date",
},
},
{
{
Value: "Netherlands",
},
{
Value: "Ava Thompson",
},
{
Value: "Enterprise",
},
{
Value: "Pilot",
},
{
Value: 265000,
Format: "currency",
CurrencyCode: "EUR",
},
{
Value: "2026-12-20",
Format: "date",
},
},
{
{
Value: "Italy",
},
{
Value: "Noah Bennett",
},
{
Value: "Startup",
},
{
Value: "Proposal",
},
{
Value: 42000,
Format: "currency",
CurrencyCode: "EUR",
},
{
Value: "2026-08-05",
Format: "date",
},
},
{
{
Value: "Poland",
},
{
Value: "Camila Ortiz",
},
{
Value: "Growth",
},
{
Value: "Qualified",
},
{
Value: 58000,
Format: "currency",
CurrencyCode: "EUR",
},
{
Value: "2026-09-21",
Format: "date",
},
},
{
{
Value: "Austria",
},
{
Value: "Ethan Tan",
},
{
Value: "Enterprise",
},
{
Value: "Procurement",
},
{
Value: 118000,
Format: "currency",
CurrencyCode: "EUR",
},
{
Value: "2026-10-12",
Format: "date",
},
},
{
{
Value: "Sweden",
},
{
Value: "Chloe Walsh",
},
{
Value: "Growth",
},
{
Value: "Discovery",
},
{
Value: 64000,
Format: "currency",
CurrencyCode: "EUR",
},
{
Value: "2026-07-28",
Format: "date",
},
},
{
{
Value: "Belgium",
},
{
Value: "Haruto Sato",
},
{
Value: "Enterprise",
},
{
Value: "Legal",
},
{
Value: 143000,
Format: "currency",
CurrencyCode: "EUR",
},
{
Value: "2026-11-08",
Format: "date",
},
},
{
{
Value: "Denmark",
},
{
Value: "Min Seo Park",
},
{
Value: "Growth",
},
{
Value: "Demo",
},
{
Value: 51000,
Format: "currency",
CurrencyCode: "EUR",
},
{
Value: "2026-08-19",
Format: "date",
},
},
},
},
},
},
)
{
"success": true,
"data": {
"buffer": "UEsDBBQAAAAIAA...",
"mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
}
}
Use the same workflow from code, agents, or n8n
When an automation moves from prototype to production, you should not have to rebuild it for every environment. Iteration Layer lets scripts, agents, and n8n workflows call the same European AI workflow runtime.
EU AI workflow runtime
Run document, image, and file steps through one EU-hosted workflow layer with shared API conventions and billing.
Agent-ready by design
Expose the same document and image actions to MCP tools and Claude Code skills, then reuse the API contract when workflows graduate into scripts or automations.
Verified n8n node
Install the verified Iteration Layer node in n8n, then route documents and generated files through the same provider from visual workflows.
Three steps to your first spreadsheet
Define your columns
Specify column names and optional widths. Columns define the header row and set the structure for your spreadsheet.
Add row data
Provide rows as positional arrays of cells. Each cell has a value, optional format (currency, percentage, date, etc.), optional style overrides, and optional row/column spans.
Get your spreadsheet
Receive the generated spreadsheet as base64-encoded JSON. CSV for data pipelines, Markdown for documentation, XLSX for Excel with full formatting.
Templates As Code
Define columns, rows, and styles as JSON. The same input produces identical spreadsheets every time — deterministic output you can rely on.
Three Output Formats
Generate CSV for data interchange, Markdown tables for docs and LLMs, or XLSX for Excel with full formatting — all from the same input.
Rich Formatting
Cell-level styles with fonts, colors, alignment, and number formats. Base styles plus per-cell overrides. Custom fonts via base64 upload.
Formulas & Merged Cells
Native Excel formulas in XLSX, server-evaluated formulas for CSV and Markdown. Merge cells for headers and grouped data.
Real-world pipelines, ready to ship
Each recipe chains multiple APIs into a complete workflow. Pick one, tweak it, and deploy — or use it as a starting point for your own pipeline.
Generate Billing Statement
Generate an XLSX billing statement with a merged company header, subscription line items, overages, credits, and subtotal/tax/total formulas.
Generate Employee Report
Generate an XLSX employee report with departments, salaries, hire dates, and currency formatting.
Generate Inventory Report
Generate an XLSX inventory report with stock levels, reorder points, unit costs, and total value formulas for purchasing teams.
Generate Invoice Spreadsheet
Generate an XLSX invoice with company info, line items, subtotal/tax/total formulas, and currency formatting.
Generate a Multi-Client Usage Report
Generate a multi-sheet XLSX report tracking API usage, credit consumption, and billing across multiple agency clients.
Generate Order Export
Export e-commerce order data to CSV with order numbers, customer details, amounts, and fulfillment status.
Generate Sales Dashboard
Generate a multi-sheet XLSX workbook with quarterly revenue, expenses, and summary formulas.
Generate Sales Report Spreadsheet
Generate a formatted XLSX spreadsheet with sales data, currency formatting, and bold headers.
Generate Timesheet Export
Generate an XLSX timesheet with logged hours, hourly rates, per-entry amount formulas, and totals for client billing or payroll.
European by design
Your data is processed on EU-hosted infrastructure and never stored beyond temporary logs. Zero data retention, GDPR-compliant workflows, and a Data Processing Agreement are available for every customer. Learn more about our security practices .
EU-hosted core processing
Application and processing infrastructure runs in Europe, with provider-scope ISO 27001 and BSI C5 evidence documented for procurement reviews.
Zero data retention
Customer files and processing results are not stored after the request. Usage logs are retained for 90 days and automatically deleted.
Clear answers for security teams
Give reviewers the answers they need up front: where files are processed, what is retained, which subprocessors are involved, and how AI inputs, outputs, review gates, and audit records move through each workflow.
Pricing
Start usage-based. Switch to a subscription when your volume becomes predictable.
Usage-based
Graduated pricing. Your effective rate decreases automatically as monthly usage grows.
- No monthly commitment
- Pay only for credits used
- Automatic volume discounts as usage grows
Predictable volume
Fixed recurring credit packs with lower effective credit prices for steady usage.
- Lower effective per-credit prices
- Fixed recurring credit packs
- Predictable monthly budget
Try Iteration Layer with 100 credits
Start with one shared trial pool before choosing subscription or pay-as-you-go billing.
Still evaluating?
Compare Iteration Layer against the biggest alternatives at a glance, then open the full head-to-head pages when you want the details.
| Feature | Iteration Layer | SheetJS | ExcelJS | OpenPyXL |
|---|---|---|---|---|
|
|
Yes
Generate spreadsheets with Excel-compatible formulas
|
Limited
Formula support is limited in the free Community Edition — Pro required for full support
|
Yes
Full formula support through programmatic API calls
|
Yes
Full formula support through programmatic API calls
|
|
|
Yes
Generate workbooks with multiple named sheets
|
Yes
Full multi-sheet workbook support
|
Yes
Full multi-sheet workbook support with programmatic API
|
Yes
Full multi-sheet workbook support with programmatic API
|
|
|
3 formats
XLSX, CSV, and Markdown output
|
4+ formats
XLSX, CSV, HTML, and ODS output supported
|
2 formats
XLSX and CSV output supported
|
1 format
XLSX output only
|
|
|
Declarative JSON
Entire spreadsheet described declaratively in a single JSON payload with styling included
|
Low-level cells
Low-level cell object manipulation — styling requires the paid Pro edition
|
Imperative API
Spreadsheets built row by row, cell by cell with imperative API calls
|
Imperative API
Spreadsheets built row by row with imperative cell-by-cell iteration
|
Frequently asked questions
What output formats are supported?
Can I create multiple sheets?
How do formulas work?
Can I use custom fonts?
How does cell formatting work?
Can I merge cells?
Build your first workflow in minutes
Chain our APIs into a workflow you can test with your own data during the 7-day trial.