Pigment
FinanceConnect 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.
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
With FlowRunner
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 Capabilities
9 actionsMetadata
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.