FlowRunner
PricingContact
Theme
Start Free
Integration Guide August 11, 2026 8 min read

Update MySQL from Google Sheets, With Approval on Bulk Writes

Connect MySQL and Google Sheets so ops teams submit bulk update requests from a spreadsheet, with an AI agent that runs the write and pauses for approval before touching a production table.

Update MySQL from Google Sheets, With Approval on Bulk Writes
trigger New or updated row in the MySQL Update Requests sheet (On New or Updated Row)
action Agent reads the row against the mapped header: table, Where column and value, Set column and value
action Select Rows in MySQL loads the current state and count of matching records
check Agent evaluates: is the table flagged production? Does the row count exceed the safe threshold?
human Agent pauses and sends a Slack message with the Where object, a sample, and the row count when the write needs a second set of eyes
action Update Rows applies the write with the explicit Where object once cleared
action Agent writes status, affectedRows, and changedRows back to the request row with Update Row

How do you connect MySQL to Google Sheets?

You connect them by setting a trigger in one system that drives a named action in the other. A new or edited row in a tracking sheet fires Google Sheets’ On New or Updated Row trigger, and FlowRunner’s agent reads that row and calls Select Rows and Update Rows in MySQL to apply the requested change, without anyone touching the database directly. FlowRunner is a visual AI-agent orchestration platform where automations run autonomously and pause for human judgment on the steps that carry real consequence. That same connection can run as an AI agent: it checks the current state of the affected records, decides whether the write is safe to run on its own, and invokes a human-in-loop approval flow as a callable tool before any write that touches a production table or a large batch of rows.

The problem with spreadsheet-driven database updates

Most operations teams do not have direct MySQL access, and that is usually by design. A billing manager who needs to mark 40 orders as refunded, or an ops lead correcting a batch of mis-tagged records, cannot run their own UPDATE statement. They open a ticket, email an engineer, or drop a request in a Slack thread, then wait. The engineer eventually gets to it, writes the query by hand, and runs it. A same-day fix can take two or three days once it clears the queue behind everything else engineering is doing that week.

The deeper problem shows up once someone does get database access, in a hurry, without a second reviewer. An UPDATE with a forgotten WHERE clause rewrites every row in the table. A DELETE meant for one region removes records company-wide. After the batch runs, there is often no clean record of what changed, who asked for it, or who approved it. The request that started as a plain spreadsheet row or a Slack message leaves no trail once it becomes a raw SQL statement, and exceptions, a row referencing a table that does not exist, a filter that matches far more rows than expected, fall through the cracks because nobody is watching for them.

How it works: the connection

FlowRunner bridges the two systems at the trigger level. Set up a tracking sheet in Google Sheets, something like an “MySQL Update Requests” tab, with columns for the target table, the Where column and value, the Set column and value, and a status column. Load Header Row maps those columns once, so the agent can reference them by name instead of by cell coordinates.

When someone adds a new request row, or edits an existing one, Sheets’ On New or Updated Row trigger fires. The agent reads the row’s values against the mapped header columns and checks that the required fields are present: a target table, a Where value, and the value to set. A row missing a required field is not sent to MySQL; the agent marks it incomplete in the status column instead.

For a complete request, the agent calls Select Rows in MySQL, filtered by the request row’s Where column and value, to load the current state of the affected records and see exactly how many rows match before anything is written. This is the step that turns a blind spreadsheet instruction into a checked one.

Once the agent has the candidate set, it calls Update Rows with an explicit Where object built from the request row. MySQL’s Update Rows action refuses to run without a Where clause, so a malformed request that would otherwise touch the entire table is rejected rather than executed. The action returns affectedRows, how many rows matched, and changedRows, how many actually changed. The agent writes both counts, and a status of Applied, back to the request row in the tracking sheet using Update Row.

A seven-step pipeline on a dark background

Can an AI agent run it? (and why a human stays in the loop)

A plain sync tool would apply every row exactly as written, or fail outright on anything it does not recognize. An AI agent running this workflow reads the request, checks it against the live table, and decides what the situation calls for.

Here is a real decision moment. A request row comes in: table orders, Where region = TX, Set status = cancelled. The Where object is well formed, and nothing about the row itself looks wrong. But when the agent calls Select Rows to preview the match, it comes back with 2,140 rows, far more than the handful of rows a typical request in this sheet touches, and orders is flagged as a production table. The agent does not silently apply the write, and it does not silently reject it. It reasons: this is a valid request, but a write of this size against a production table is exactly the kind of action that is trivial to run and painful to reverse. It should not proceed without a person confirming.

The agent invokes the human-in-loop flow as a tool. That flow sends a Slack message to the table’s owner: “This Update Rows on orders matches 2,140 rows. Here is the Where object and a sample. Approve, edit the filter, or cancel?” The message carries the actual filter, a handful of sample rows, and the count, so the reviewer is deciding with the same information the agent has.

The owner responds from Slack. The agent resumes: if approved, it runs Update Rows and reports affectedRows and changedRows back to the sheet. If the filter needs adjusting, it updates the Where object and re-checks the count before asking again. If cancelled, it marks the row Rejected and moves on. Either way, the approver’s identity, the decision, and the timestamp are captured in the audit trail.

Prospects call this a digital andon cord. This is not a sync tool. The agent knows when to stop and ask.

A dark Slack message card on a near-black background

FlowRunner vs n8n (the tool you’re probably comparing)

If your team has an engineer who already reaches for n8n, it is a reasonable first instinct for connecting a database to a spreadsheet. n8n ships a native MySQL node, a native Google Sheets node, and self-hosting that is genuinely mature, teams run n8n’s Community edition on their own infrastructure with unlimited executions today. That is a real strength, not a marketing claim.

The gap shows up in how the pause-and-ask step is decided and governed.

Dimensionn8nFlowRunner
Deciding when to pauseIF or Switch conditions set at build time, such as a fixed row-count thresholdThe agent reasons about the request in context, table flagged production, row count against what is typical for this sheet, before deciding to pause
Human-in-loopNative “Send and Wait for Response” node, placed in the workflow as a stepThe agent invokes human oversight as a callable tool, at the moment it decides the write needs a second set of eyes
Governance at this price pointSSO, RBAC, and audit trails are Enterprise-only, custom pricing30-day audit trails, SLA tracking, and RBAC are included at Professional, $299 per month
Self-hostingSelf-hosted Community edition is free and mature todaySelf-hosted deployment is available at the Enterprise tier

n8n is a fair choice if your database logic is simple and your thresholds do not need to adapt to context. FlowRunner is the better fit when the agent needs to weigh what it found, not just check a number against a fixed rule, and when your compliance team needs an audit trail without paying Enterprise pricing to get one.

Before and after

CategoryBeforeAfter
Bulk update requestsOps team files a ticket or a Slack message and waits for an engineer to write and run the SQLOps team fills in a row on a tracking sheet; the agent runs the update through Update Rows
Unbounded writesAn UPDATE with a forgotten WHERE clause rewrites every row in the tableUpdate Rows and Delete Rows refuse to run without an explicit Where object
Write visibilityAfter a batch write there is no clean record of what changedEvery write returns matched and changed row counts, written back to the request row
Row intakeA new or edited request sits until someone happens to notice itA new or updated row triggers the flow immediately
Approval trailNo single record of who approved a bulk change or whenThe approver’s identity, decision, and timestamp are captured in the audit trail
Database accessOnly engineers with direct MySQL credentials can make the changeOps teams request changes from a spreadsheet; no one else needs database access

A dark summary panel on a near-black background titled "Update Requests, last 7 days"

What you can build

Bulk update requests without an engineering ticket. An ops team member fills in a row: table, Where clause, new value. The agent calls Select Rows to preview the match and Update Rows to apply it once the request clears validation, no ticket queue required.

Idempotent catalog sync from a spreadsheet. A weekly product sheet feeds MySQL through Upsert Row keyed on SKU, so re-running the import updates existing rows instead of creating duplicates when the same sheet is re-submitted.

Live reporting from MySQL back into Sheets. On a schedule, the agent calls Select Rows against a reporting table and Add Rows to append the latest data into a sheet, so stakeholders see current numbers without anyone exporting from the database by hand.

Schema-checked onboarding for a new tracking sheet. When a new sheet tab is added, On New Sheet fires and the agent calls Get Table Schema in MySQL to confirm the target table’s columns before it starts writing to it, so a mismatched header does not silently corrupt data.

Common questions

Is it free to connect MySQL and Google Sheets on FlowRunner? FlowRunner’s trial gives you $100 in execution credit, which covers roughly 67 days of real use on the Growth plan. No credit card required. After that, Growth starts at $45 per month.

Does the agent need my own OpenAI key? FlowRunner uses a bring-your-own-key model. You connect the AI provider of your choice, such as Anthropic Claude or OpenAI, and FlowRunner orchestrates your agents using that key. You are never locked into a specific model.

What happens when the agent isn’t sure a write is safe? The agent pauses before running Update Rows or Delete Rows and sends a Slack message with the Where object, a sample of the affected rows, and the row count. A person approves, edits the filter, or cancels, and the decision is recorded in the audit trail.

Can I self-host FlowRunner? Yes. FlowRunner offers a free Community Edition for single-instance self-hosting, and an Enterprise self-hosted option with multi-instance clustering, full compliance features, and dedicated support.

Can ops teams update MySQL without writing SQL? Yes. The agent reads the table, Where column, and new value from a spreadsheet row and calls MySQL’s Update Rows action directly. No one on the ops team has to write or run a SQL statement.

Do unlimited users come with every plan? Yes. Every FlowRunner tier, from Growth at $45 per month to Enterprise, includes unlimited users and unlimited workflows. You pay for execution volume, not seat count.

Getting started

The $100 trial credit runs approximately 67 days on the Growth tier. No credit card required. Corporate email only.

Connect both integrations from the FlowRunner integrations library: MySQL and Google Sheets. The request-and-approve workflow described here can be live in an afternoon.

Start your free trial at flowrunner.ai or book a 30-minute walkthrough at calendly.com/flowrunner/intro. Bring your update process and your spreadsheet. We will build the first workflow together.

Ready to automate this?

Start building your first workflow free. $100 in credits, no card required.