Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

In a Power Automate cloud flow, add the Data Operation – Create HTML table action and set its From value to an array of JSON objects. Choose automatic columns for a quick table or custom columns when you need specific headers and values. If the source is a JSON string, parse it first; if rows need cleaning or filtering, use Select or Filter array before the conversion.

The action produces HTML for later steps such as email, where the sending action must be configured to treat the body as HTML. Power Automate Desktop has a different action, Create HTML content, for authoring rich HTML text; it is not the cloud-flow array-to-table action described here.

What Create HTML table converts

The cloud-flow action expects an array. Each array item is normally a JSON object representing one row, and each property becomes a possible column. For example:

[{"Name":"Ada Lovelace","Department":"Engineering","Status":"Active"},{"Name":"Grace Hopper","Department":"Engineering","Status":"On leave"}]

Passing that array to Create HTML table returns an HTML <table> structure containing two rows. The source can come from a trigger, an HTTP request, a SharePoint or Dataverse query, a variable, or any earlier action that returns an array. The conversion does not require you to hand-write table tags.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Build the basic cloud flow

  1. Identify the array. In the dynamic-content picker, locate the output that contains the collection of objects. If the output is an entire HTTP body or another wrapper object, select the property that actually contains the array.
  2. Add the conversion action. Select New step, search for Create HTML table, and choose Data Operation – Create HTML table.
  3. Set From. Put the array in the From field. You can select a dynamic token or enter an expression that evaluates to an array.
  4. Choose columns. Leave Columns set to Automatic for a quick result, or choose Custom to define the header and value for every column.
  5. Use the result. Select the action’s output in a later step, such as an email, approval, Teams message, Compose action, or HTTP response.

A common layout is:

Trigger or source action → Parse JSON (if needed) → Select or Filter array (if needed) → Create HTML table → destination action

Example: send the table by email

  1. Add Send an email after Create HTML table.
  2. Insert the HTML-table output into the message body.
  3. Enable the email action’s IsHtml option. Without that setting, the recipient may see literal tags instead of a rendered table.

Prepare data before conversion

Parse JSON when the input is a string

A JSON string is text, not a structured array. Add Parse JSON before the table action so Power Automate can expose the properties as tokens. Provide a representative sample or schema that describes an array of objects, then use the parsed array in From. Parsing also makes property names visible when you configure custom columns.

Reshape rows with Select

Use Select when the source has unwanted fields, awkward names, or nested values. Map each output property to the value you want in the table, then pass the Select output to Create HTML table. A reshaped object can have presentation-friendly keys such as Customer, OrderNumber, and Total even when the source uses different names.

Remove rows with Filter array

Use Filter array before conversion when only matching records should appear. For example, filter to active records or a selected date range, then set From to the filtered result. Filtering first keeps excluded records out of both the HTML and any downstream email.

Use an expression for a nested array

If the array is inside a larger object, enter an expression that returns that property rather than passing the wrapper object. Verify the run history output: the value must begin as an array, not as a single object or quoted JSON text. If it is quoted text, parse it first.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Automatic columns or custom columns?

Setting Best for What you control Trade-off
Automatic Quick tables where source property names are acceptable Power Automate derives headers and values from the objects Headers and column order are less deliberate, and source fields you did not intend to display may appear
Custom Email reports and user-facing tables Each header plus its value expression, such as item()?['PropertyName'] Requires mapping every column, but gives predictable output

Configure a custom column

  1. Open the Columns dropdown in Create HTML table and choose Custom.
  2. Add a column and type the header that readers should see.
  3. In the value field, choose the property token or enter an expression such as item()?['Name'].
  4. Repeat for each field, then save and run the flow.

Custom mapping is especially useful when internal property names are cryptic, when you need a fixed column order, or when you want to omit sensitive fields.

Make the result useful in email and other actions

The output is HTML markup, so pass it as a single value to the next action. For email, set IsHtml to true or enable the equivalent HTML-body option exposed by your connector. For other destinations, confirm that the receiving system accepts HTML rather than plain text.

If you need surrounding text, place it before or after the table output in the destination body. Keep the table action focused on rows and columns; use the email or message action for the subject, greeting, explanation, and closing.

Line breaks and display problems

Incorrectly formatted output can be caused by missing line breaks in the data. Microsoft’s related Azure Logic Apps data-operation guidance shows replacing carriage-return/line-feed sequences with <br/> as one troubleshooting technique. Treat that as a related workflow technique: inspect the actual run output and apply the replacement only when your values contain line-break characters that need to render inside an HTML cell.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Do not add a replacement blindly. If the value already contains HTML or the destination treats the text differently, replacing every line break can produce unwanted markup. Test with a representative row that includes a multi-line value.

Cloud Create HTML table versus Power Automate Desktop Create HTML content

Feature Cloud flow: Create HTML table Power Automate Desktop: Create HTML content
Primary purpose Convert an array of JSON objects into an HTML table Generate HTML content into a text variable for later desktop-flow actions
Typical input Structured array Content you author for the desktop flow
Use this when You need rows and columns from cloud-flow data You need to compose richer HTML text in a desktop automation

These actions have similar names but solve different problems. For an array-to-table conversion in a cloud flow, choose Create HTML table.

Troubleshooting checklist

“The input is not valid” or the action will not run

  • Cause: The value in From is an object, string, or null instead of an array.
  • Fix: Inspect the previous action in run history. Select the property containing the collection, use Parse JSON for a JSON string, or reshape the data with Select.

Only one row appears

  • Cause: A single object was supplied instead of an array of objects, or an expression selected one item.
  • Fix: Check the value type and make sure the expression returns the complete collection. If the source API wraps records, target its array property.

Columns are missing or empty

  • Cause: Property names differ between rows, the custom expression uses the wrong spelling, or the value is nested.
  • Fix: Compare the run-history JSON with each custom mapping. Use the exact property name in item()?['PropertyName'], and use Select first when nested data needs flattening.

The email shows tags such as <table>

  • Cause: The email body is being sent as plain text.
  • Fix: Enable IsHtml in the email action and send the output from Create HTML table in the body.

Cells contain unexpected line breaks

  • Cause: Source values contain carriage-return/line-feed characters.
  • Fix: Inspect a failing value. If the receiving renderer needs explicit breaks, use a replacement that converts CRLF to <br/>, then verify the rendered result. This is a related Logic Apps troubleshooting approach, not a universal requirement.

The table contains fields that should not be shown

  • Cause: Automatic columns include properties from the source objects.
  • Fix: Switch to Custom columns or use Select to create a smaller presentation object before conversion.

Reliability, testing, and operational notes

  • Validate the shape at the boundary. Add Parse JSON when the source contract is text, and inspect a successful run before wiring the result to email.
  • Test empty results. A filter can produce an empty array. Decide whether the destination should receive an empty table, a “no records” message, or a conditional branch.
  • Keep presentation separate from data preparation. Use Filter array and Select to decide what belongs in the report; use custom columns to decide how it is labeled.
  • Check the destination renderer. The action creates HTML, but the downstream connector or client determines whether that HTML is rendered or displayed as text.
  • Review run history after schema changes. If the source property names change, custom expressions can continue running while producing blank cells, so verify both the input and the final table.

No numeric conversion limit, licensing requirement, or geography-specific restriction is established here. Treat limits imposed by your particular connector, tenant, or destination as separate operational questions and verify them in your environment.

Or skip the browser setup

If your next step is to capture a visual of a publicly reachable page containing the rendered report, ScreenshotNeo can return a screenshot or PDF through one GET request. It accepts consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the page verdict and billing status in X-Page-Verdict and X-Billed headers. Its MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use a URL that is reachable by ScreenshotNeo, then adapt the target URL in the examples below. The API documentation is at screenshotneo.com/docs/.

cURL

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Python

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)

Node.js

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

ScreenshotNeo also supports full-page capture with lazy images loaded, CSS-selector element capture, dark mode, 12 device presets plus custom viewports, retina scale, PDF paper and page-range controls, custom CSS and JavaScript, pre-capture clicks, selector hiding, waits, request and resource blocking, custom headers and cookies, timezone and geolocation, transparent backgrounds, resizing, chosen cache TTLs, signed image links, asynchronous jobs with signed webhooks, bulk capture for up to 100 URLs per call, a usage API, and an OpenAPI specification. Parameter names used by other screenshot APIs are accepted to ease migration.

The Free plan includes 1,000 screenshots each month with no card. Paid plans start at $5 for 3,000 shots; every feature is available on every plan, and yearly billing provides two months free. Create a free ScreenshotNeo account to get started.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

FAQ

Can I use a variable as the source?

Yes, provided the variable contains an array of objects when the table action runs. If it contains serialized JSON text, parse that text first.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Where can I inspect the generated markup?

Open the flow run, expand the Create HTML table action, and inspect its output. This lets you distinguish a conversion problem from a destination that is rendering the same output as plain text.

Should I use the desktop action for a cloud flow?

No. Use the cloud-flow Create HTML table action for array-to-table conversion. Use Power Automate Desktop’s Create HTML content when the desktop automation needs authored HTML text in a variable.

Frequently Asked Questions

Can I use a variable as the source?

Yes, provided the variable contains an array of objects when the table action runs. If it contains serialized JSON text, parse that text first.

Where can I inspect the generated markup?

Open the flow run, expand the Create HTML table action, and inspect its output. This distinguishes a conversion problem from a destination that renders the output as plain text.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Should I use the desktop action for a cloud flow?

No. Use cloud-flow Create HTML table for array-to-table conversion; use Power Automate Desktop Create HTML content when a desktop automation needs authored HTML text in a variable.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.