Create Invoicing System with Airtable + Make + Google Docs: How to Dynamically Populate an Invoice List Item Table with Data from Airtable?

Hey everyone, I’m struggling with a Make (formerly Integromat) automation and could use some help.

I’m trying to create a Google Docs document with a dynamic table, populated with data from Airtable. My workflow in Make is as follows:

:one: Trigger: A webhook activated by a button in Airtable.
:two: Airtable - Search Records: Retrieves the “line items” of an invoice (e.g., purchased services).
:three: Array Aggregator: Groups all invoice items into a single array.
:four: Google Docs - Create a Document from Template: Inserts the data into a predefined template.

:pushpin: The Problem

The Google Docs module only takes the first row of the array, instead of generating multiple rows in the table. I’ve tried several solutions:

  • Passing the array directly in the fields (Array[].Field) → :cross_mark: Google Docs only inserts one row.
  • Using an Iterator to process each row separately → :cross_mark: Generates multiple documents instead of a single table.
  • Text Aggregator to format the table as text:cross_mark: Inserts everything as one block of text, not multiple rows.
  • Passing an HTML Table string to Google Docs:cross_mark: Google Docs reads it as plain text instead of rendering a table.

:pushpin: What I’m Trying to Achieve

:white_check_mark: I want Google Docs to generate one row per array item within the table.
Example of the expected result in the document:

Service Price Quantity Total
Monthly Fee 50€ 1 50€
Registration Fee 35€ 1 35€
Monthly Fee 2 60€ 1 60€

:pushpin: Questions

:one: Has anyone successfully made Google Docs dynamically repeat table rows using Make?
:two: Is there an alternative way to structure the data so that Google Docs correctly interprets it as a list of rows?
:three: If you’ve solved this before, could you share your setup?

Thanks in advance for your help! :raising_hands:

Welcome!

I don’t have anything ready to share, but this is how I would go about it:

Option 1:
If you always have (max) 3 rows to fill I would just keep 3 rows empty in your template and use batchupdate (Bulk update multiple rows module) to update the contents of those specific rows. You can search the community and Google on how to bulk insert rows in a Google sheet using the API if the default update modules are not to your liking.

Option 2:
If you have a variable amount of rows and want to be precise I would:

  • create the array with rows you need to insert
  • count those items and insert the same amount of empty rows in the sheet using the custom API call option like this:
POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate

{
  "requests": [
    {
      "insertDimension": {
        "range": {
          "sheetId": sheetId,
          "dimension": "ROWS",
          "startIndex": 0,
          "endIndex": 100
        },
        "inheritBefore": false
      }
    },
  ],
}
  • use “Bulk update multiple rows” module to update the range you just created in the Google sheet with the array you created at the beginning.

I know it’s not a ready to implement solution, but I hope this does help you create it yourself.

2 Likes