Every completed review produces an evidence record (who reviewed, what they saw, what they changed, timing, verdict). This guide files each one automatically, into your own Dataverse table, under your own sign-in, using a no-code Power Automate flow. We never hold your credentials and never see your data. Written for whoever sets things up at your firm: IT, or a comfortable admin. About 20 minutes. Each step is marked your side or we help.
Rather do this together? Most firms finish in one short screen-share with us.
Email us, we'll set it up with youThe moment a reviewer approves, the Amplify review service sends a small
JSON record to a web address you control. You point that web address at a Power Automate
flow that writes one row into your Dataverse table. The record includes a
flow-friendly flat object whose fields map one-to-one onto your
columns, so the flow needs no formulas or expressions. This is the path we recommend
for firms. (Advanced alternative: have your AI file the record itself through the
connect-Claude-to-Dataverse guide; it relies
on Microsoft's connector program, which can be finicky to set up.) Both land the same
records in your own table.
Create (or reuse) a table with text columns for: name, review task id, template,
verdict, reviewer, fields overridden, content hash, correction summary, reviewed at, and a
multiline text column for the full record JSON. (Columns carry your environment's
default publisher prefix, for example cr8dd_.)
fieldsOverridden = 0,
so a Minimum of 1 makes the most common case, the clean approval, the one that gets rejected.
Full details are in the sharp edges below.Add a Parse JSON action on the trigger body. Click "Use sample payload to generate schema," paste this example, and let it generate the schema:
{
"type": "amplify.review.completed",
"taskId": "rt_example",
"verdict": "approved",
"completedAt": "2026-07-23T00:00:00Z",
"flat": {
"name": "Amex expense coding, July",
"reviewTaskId": "rt_example",
"template": "expense-coding",
"verdict": "approved",
"reviewer": "Reviewer Name",
"fieldsOverridden": 0,
"contentHash": "sha256:…",
"correctionSummary": "Approved as written",
"reviewedAt": "2026-07-23T00:00:00Z",
"fullRecordJson": "{…}"
}
}Add a Dataverse "Add a new row" action, pick your table, and map each column straight
from the parsed flat fields, one field per column, no expressions:
Name ← flat.name, Review Task Id ← flat.reviewTaskId,
Template ← flat.template, Verdict ← flat.verdict,
Reviewer ← flat.reviewer, Fields Overridden ← flat.fieldsOverridden,
Content Hash ← flat.contentHash, Correction Summary ← flat.correctionSummary,
Reviewed At ← flat.reviewedAt, Full Record Json ← flat.fullRecordJson.
Save the flow and copy its HTTP POST URL. Add it to your Amplify connector address so every review created through that connector files automatically on completion:
…/mcp/review?store_webhook=<your flow URL, URL-encoded>&store_name=Dataverse%20Review%20Records
After a test review, your AI's get_verdict
shows a delivery status. Note that delivered 202 means the flow
accepted the record, not that a row landed yet (it runs asynchronously): confirm the
row separately, see the sharp edges.
Optional, the firm profile. Tell your AI once, in plain words: "save our firm profile: our expense codes are…, our projects are…, links should last 48 hours". If your Amplify address came from the Try Amplify popup it already includes a private profile key and this just works; if not, your AI will hand you a ready-made replacement address to paste into the connector settings (one paste, done). From then on, short requests like "do my expenses" get those defaults filled automatically; anything you state explicitly still wins. The key in the address is private (anyone holding it can edit the defaults); never put passwords or client data in a profile.
Battle-tested from wiring this flow live. Most are quick one-time fixes.
CreateRecord requires 'item/<prefix>_fields_overridden' >= 1 but is '0'.
Why: the Fields Overridden column was created with Minimum value 1, but an
approved-with-no-edits review sends fieldsOverridden = 0, so the
common case (a clean approval) is exactly what the column rejects. Fix: Tables → your
table → Columns → Fields Overridden → Advanced options → Minimum value = 0 → Save, then
re-file. (When we set a table up for you, we use Minimum 0 so no one hits this.)>= 1 error
persists after setting Minimum 0. Why: the Dataverse connector caches a table's field rules
separately from the table and refreshes on Microsoft's schedule (a few minutes, up to about
an hour). Two options: wait and re-file, or unmap the column (next item) for an immediate,
deterministic fix.get_verdict shows
delivered 202 and Power Automate shows green, but there's no row.
Why: the HTTP trigger returns 202 the instant it accepts the record; the flow then runs
asynchronously and can still fail at Add a new row. Verify by querying the table for
the review's task id, or checking the flow's 28-day run history for a Failed run. Don't trust
202 or the banner alone.<your-org>) lands on "Something went wrong
/ Network Error": the org name and the Power Automate URL's environment segment
(Default-…-GUID) are different identifiers. Fix: open
make.powerautomate.com
normally and pick the environment from the picker (top right).Stuck on one of these? Email us and we'll get on a short screen-share.
Where your data goes, plainly: everything here writes to your Dataverse, in your tenant, as you. The evidence records filed there are yours. Your audit trail stays yours; we never hold your credentials.