FlowRunner
PricingContact
Theme
Start Free

Pigment

Finance

Connect AI agents to Pigment, the enterprise business planning and FP&A platform. Agents move data in and out of planning models and read audit logs, so a forecast reflects what the source systems say rather than a stale export.

9 actions API key available
Pigment website ↗ Platform Documentation ↗ Capability data verified 2026-08-05
The nightly close job finishes in the source ERP and a prepared actuals file is ready to load
Agent calls Export View to pull the current contents of the target Block as CSV
Agent diffs the prepared file against that export, counting changed rows and any rows the load would drop
Agent confirms through List Import Configurations that the intended configuration exists and the target is not a Table Block
Agent calls Import CSV Data and polls Get Import Status until it reports Completed
Agent reads Get Audit Logs for the resulting events and posts the load summary with insert, update and delete counts
Any variance above the agreed threshold stops the load, and the FP&A owner approves the numbers before they reach the model

What This Integration Enables

Pigment is where a company's plan lives, and the plan is downstream of everything. A revenue forecast is a function of pipeline. A headcount plan is a function of the current roster and the open requisitions. A cash view is a function of what actually cleared. All of those facts sit in other systems, and the traditional route between them is a person, a CSV and a Tuesday. This connector replaces the person, not the judgment.

The surface is four metadata reads, three import operations, one export and one audit read. That is not a thin API, it is a precisely scoped one. List Applications, List Blocks, List Views and List Import Configurations let an agent discover the model's structure at run time rather than carrying hard-coded IDs that break the first time somebody renames a Block. Import CSV Data pushes a file into a configured target and Trigger Import runs a configuration that pulls from a connected source, both returning an import ID that Get Import Status resolves into a state and, optionally, a detailed report of insert, update and delete counts across the impacted Blocks. Export View pulls a saved slice of a Block back out as CSV. Get Audit Logs returns what happened in the workspace and who did it.

Pay attention to how Pigment splits its keys, because it tells you what the vendor thinks is at stake. Import keys and Export keys are issued by Workspace Admins. Audit Logs keys are issued by Security Admins, and they read from a different base path. Pigment has separated the ability to put numbers into the model, the ability to take numbers out, and the ability to see who did either. That separation is the reason to treat this as a finance connector rather than a data connector, and it is worth mirroring in how you configure FlowRunner: give each flow the narrowest key its job requires, rather than one key that can do everything.

Two limits belong up front rather than in a footnote. Import operations are not supported on Table Blocks, and metadata calls against a Table Block return empty results rather than an error, which is a failure mode worth checking for explicitly. And the audit log looks back a maximum of 180 days from the query date, so if audit evidence needs to survive longer than that, the flow that reads it should also be the flow that keeps a copy somewhere with a longer retention.

Pair it accordingly. Actuals out of NetSuite or QuickBooks Online, pipeline out of Salesforce, headcount and requisitions out of Workday, modelled aggregates out of Snowflake, all landing in the Blocks the plan reads from, on the cadence the close actually runs on.

Without FlowRunner

Actuals arrive by hand Someone exports from the ERP, reshapes the file and uploads it into the planning model
Nobody sees what a load changed The import succeeds and the difference it made is inferred from the numbers afterwards
Reconciliation happens after the fact A wrong figure is found when a variance looks odd in review, not when it was loaded

With FlowRunner

Actuals arrive on a schedule The load runs when the source system says the period is ready
Every load carries a diff The before state and the change are recorded together before the write happens
Reconciliation happens at the gate A material variance becomes a question for a named owner instead of a surprise in review

Use Case Scenarios

The nightly actuals load that shows its working

The close job finishes in the ERP and drops a prepared actuals file. Before writing anything, the agent calls Export View on the target Block and holds the current state. It diffs the incoming file against it, producing three numbers: rows added, rows changed, and rows the load would remove. It confirms through List Import Configurations that the intended configuration is present and that the target is not a Table Block, where imports are not supported. Where the diff sits inside the agreed tolerance it calls Import CSV Data, polls Get Import Status until the state is Completed, and reads Get Audit Logs to confirm the event landed. Where the diff is outside tolerance it does none of that, and instead puts the three numbers and the largest individual movements in front of the FP&A owner.

A board pack assembled from the model rather than from screenshots

Ahead of the board meeting the agent walks List Applications and List Blocks to locate the reporting Blocks, then List Views to find the saved slices the board actually looks at. It calls Export View on each one with the date format and delimiter the downstream tooling expects, and assembles the pack from the exports. Because every figure comes out of a named View rather than a copied cell, the pack is reproducible: run it again a week later and you get the same slice against a moved model, and the difference is a real difference rather than a transcription error. The finance owner reviews the assembled pack, not the wiring.

An import that reports itself instead of being chased

An integration-based configuration pulls from a connected source on a schedule. The agent calls Trigger Import, takes the returned import ID, and polls Get Import Status with the detailed report enabled. Where the state comes back Failed, it reads the error detail and raises it with the owner immediately rather than at the next review, and where the state comes back Completed it posts the insert, update and delete counts per impacted Block. That last figure is the one worth watching. A load that was expected to add rows and instead reports deletions has done something nobody asked for, and knowing that within minutes is materially different from knowing it in a variance discussion three weeks later.

Human-in-Loop Highlight

The gate on this connector sits on the moment data enters the planning model, which means Import CSV Data and Trigger Import. The reason is not that imports fail. It is that they succeed.

A completed import into a Pigment Block does not stop at that Block. Blocks feed Metrics, Metrics feed Views, and Views are what somebody reads when they decide whether to open a requisition, hold a hiring freeze, commit a number to the board, or revise guidance. There is no undo action in this API. There is no rollback operation, no restore-previous-state call, no way to ask Pigment to put the Block back the way it was ten minutes ago. Get Import Status will tell you afterwards exactly how many rows were inserted, updated and deleted, and by then the model has already recalculated. The detailed report is a receipt, not a safety net.

This is the shape of failure that finance teams recognise, because it is never a broken pipeline. It is a currency column that arrived unconverted, a period boundary off by one so December's actuals landed on January, a source extract that ran before the last batch posted and therefore understated a line by a plausible amount. Every one of those imports completes successfully. Every one produces a forecast that looks entirely reasonable. Somebody makes a decision on it.

So FlowRunner does the one thing that is available here and does it before the write rather than after. The agent calls Export View first and holds the current state of the target Block. It diffs the incoming file against that state and computes what the load will actually do: how many rows change, by how much in aggregate, and whether any rows disappear. Where the movement is inside the tolerance the finance team set, the import runs unattended, because a routine actuals load should not need a person and asking for approval on every one of them trains people to approve without reading. Where the movement is outside tolerance, or where the diff shows deletions in a load that was only supposed to add, the agent stops and raises a human-in-the-loop step for the named FP&A owner: "Tonight's actuals load into FY26 Revenue Actuals moves EMEA subscription revenue by 14 percent against last night's state and removes 62 rows. Prior value and proposed value are attached per region. Load it, hold it while I re-pull from the source, or load only the additions?"

The person answers, the answer is recorded, and Get Audit Logs carries the resulting event so the approval and the change can be reconciled later by whoever asks. That is the whole argument. The agent does the reconciliation nobody has time to do by hand, in full, every night. It does not get to decide what the plan says.

Agent processes routinely
Detects exception requiring judgment
Clear match Continues automatically
Ambiguous Routes to human via preferred channel
Human decides
Agent resumes with decision

Agent Capabilities

9 actions

Metadata

4
  • List Applications Lists all Applications in the Pigment workspace the API key belongs to. Applications are the top-level containers holding Blocks, Views and import configurations, and their IDs are required by most other operations. Start discovery here rather than hard-coding an Application ID, so a flow survives a workspace being reorganised.
  • List Blocks Lists all Blocks in a specific Application. Blocks are the data structures that hold model data, covering Metrics, Lists and Tables, and their IDs are what you pass on to look up Views or import configurations. Worth knowing before you build on it: import configurations are not available on Table Blocks, so a flow that discovers Blocks should also branch on their type.
  • List Views Lists all Views in a specific Block. A View is a saved slice of a Block's data, and its ID is what Export View needs. Using this rather than a stored ID means a report flow keeps working when the View it reads is rebuilt, provided the name it looks for survives.
  • List Import Configurations Retrieves the import configurations attached to a specific Block. Each configuration ID is what Import CSV Data or Trigger Import runs against. Table Blocks do not support imports, so a request for one returns an empty list rather than an error, which is a case a flow should test for explicitly rather than treat as a transient failure.

Import

3
  • Import CSV Data Pushes CSV content to a Pigment import configuration to load data into the target Block, sending the raw CSV as the request body. Returns an import ID that Get Import Status resolves into a state. This is the action that writes your source systems' numbers into the plan, it is not supported on Table Blocks, and it is the action that belongs behind a variance check, because the API offers no way to reverse a completed load.
  • Trigger Import Runs an integration-based or Metric and List import configuration in Pigment with no file upload, for configurations that pull from a connected source rather than accepting a pushed file. Returns an import ID for tracking. Same consequence profile as Import CSV Data: the data lands in a Block the plan reads from and there is no undo, so the gate applies equally.
  • Get Import Status Retrieves the status of a previously triggered import using its import ID, reporting InProgress, Completed or Failed alongside timestamps and error details, and optionally returning a detailed report of insert, update and delete counts across the impacted Blocks. Poll it after any import rather than assuming success. The delete count in the detailed report is the number worth alerting on, because a load that was supposed to add rows and instead removed them has quietly changed a model nobody asked it to change.

Export

1
  • Export View Exports the data of a Pigment View as CSV, with dimensions returned as rows and metrics as columns, and configurable date format and field delimiter. Requires the View ID, found in the Block URL or through List Views, and an Export-type API key. Use it to build reporting from named Views rather than copied cells, and use it before an import as the cheapest way to capture the state a load is about to change.

Audit

1
  • Get Audit Logs Retrieves workspace audit log events using an Audit Logs API key, returning up to 1000 events per request sorted by ingestion time with a cursor for pagination. The maximum lookback is 180 days before the query date. Use it to reconcile approvals against the changes they authorised, and where evidence needs to outlive 180 days, have the same flow write a copy to a store with the retention your policy actually requires.

Frequently Asked Questions

What can FlowRunner do with Pigment?

FlowRunner agents can run List Applications, List Blocks, and List Views in Pigment, plus 6 more actions.

Does connecting Pigment to FlowRunner require OAuth?

No. Pigment connects to FlowRunner with an API key, no OAuth flow required.

Can Pigment trigger a FlowRunner workflow automatically?

Pigment doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.

Start building with Pigment

$100 in credits. No card required. Connect in minutes.