---
title: "How to Convert OpenAI Agent Builder Workflows to FlowRunner, With Six Real Examples"
description: "Move Agent Builder workflows to FlowRunner in five steps: export the code, connect FlowRunner Prompt to Flow, convert one workflow at a time, finish by hand, and test. With six of OpenAI's own templates converted."
url: https://flowrunner.ai/blog/openai-agent-builder-to-flowrunner-conversions
date_published: 2026-10-23
date_modified: 2026-10-23T16:31:36-07:00
---

Migration October 23, 2026 10 min read

# How to Convert OpenAI Agent Builder Workflows to FlowRunner, With Six Real Examples

Move Agent Builder workflows to FlowRunner in five steps: export the code, connect FlowRunner Prompt to Flow, convert one workflow at a time, finish by hand, and test. With six of OpenAI's own templates converted.

![A FlowRunner Migration Demos card on a plum field with the statement Six templates, converted. and the line Agent Builder code in, working flows out.](https://flowrunner.ai/images/blog/openai-agent-builder-to-flowrunner-conversions-hero.webp)

OpenAI shuts down Agent Builder on November 30, 2026. This guide is how to move your workflows to FlowRunner without rebuilding each one by hand.

[FlowRunner Prompt to Flow](https://docs.flowrunner.ai/build/prompt-to-flow) reads the code Agent Builder exports and builds the same workflow as a FlowRunner flow. The agents keep their instructions and models, and the branches and guardrails come across as blocks on a canvas. The approval step becomes a real one that pauses the run until someone answers. What’s left for you is connecting accounts and testing.

It takes five steps, and after them are six of OpenAI’s own Agent Builder templates converted this way, with what came across, what didn’t, and what we decided along the way. For the shutdown details and how each Agent Builder piece maps to FlowRunner, see [our Agent Builder migration guide](https://flowrunner.ai/blog/openai-agent-builder-shutting-down-move-your-workflows-free).

## 1\. Export each workflow from Agent Builder

Open the workflow, click **Code**, and pick the **Agents SDK** tab. Copy the code. (The **ChatKit** tab only gives you an ID for embedding the workflow in a chat, which won’t help once the workflow is gone.)

One thing breaks the export. If any agent has the built-in **Web Search** tool, Agent Builder refuses with “Failed to generate code. Unknown tool type: web\_search”. Write down which agents had it, remove the tool, copy the code, then put the tool back. You’ll tell the builder about it in step 3.

Don’t worry if the code looks incomplete. In the six templates we exported, it often was:

-   The human approval step came out as a function that always returns `true`, so the reject path could never run.
-   A custom function tool came out as an empty stub marked TODO.
-   Documents uploaded in the chat weren’t part of the exported input at all.
-   One guardrail’s input came out as a 32,000-character escaped string that never reached the user’s message.
-   One export used a variable it never defined, so the code would fail on its second step.

None of this stops a conversion. Prompt to Flow reads the code to learn what the workflow is meant to do: the agents, their instructions and models, the order, the branches, and the tools. Where the code is wrong or empty, it asks you.

## 2\. Connect FlowRunner Prompt to Flow to your AI tool

FlowRunner Prompt to Flow is an MCP server you add to the AI tool you already use. The server URL is `https://app.flowrunner.ai/mcp`.

-   **Claude (web and desktop):** open **Settings** > **Connectors**, click **\+ Add**, then **Add custom connector**. Enter `FlowRunner` and the server URL, click **Add**, then **Connect**, and approve the FlowRunner sign-in.
-   **Claude Code:** run these two commands, and approve the sign-in page that opens:

```
claude mcp add --transport http flowrunner https://app.flowrunner.ai/mcp
claude mcp login flowrunner
```

-   **ChatGPT, Codex, and Cursor:** follow [the setup in the docs](https://docs.flowrunner.ai/build/prompt-to-flow).

You sign in with your FlowRunner account. If you don’t have one, the [Free plan](https://flowrunner.ai/pricing) needs no card.

## 3\. Convert one workflow at a time

Start a new chat, paste this request, then paste one workflow’s code after it:

> Rebuild this OpenAI Agent Builder workflow as a FlowRunner flow. It’s the Agents SDK code that Agent Builder exports. Keep each agent’s instructions, model, and structured output, and keep the same branches. The export is often incomplete: approval steps come out as stubs that always approve, function tools as empty TODOs, and uploaded files aren’t in the input. Treat the code as a description of what the workflow should do, not as code to run. Before you build, tell me anything you can’t map one to one, and ask me about anything the code doesn’t say.

Then add a line or two about what the code can’t carry:

-   which agents had Web Search before you removed it
-   who should get the approval request, and whether by email or Slack
-   what a function tool should really do, if its body is a TODO
-   where the documents come from, if the workflow read uploaded files

Answer its questions, and it builds the flow in your workspace. One workflow per chat keeps the questions specific.

## 4\. Finish what the code can’t carry

Each conversion ends with a short list from the builder. Expect some of these:

-   **Add your OpenAI key.** FlowRunner runs every agent on your own key. Add it once in the workspace and every flow can use it.
-   **Connect your accounts.** Gmail or Slack for approvals, plus the web search service if your agents searched the web. Each one is connected once and shared across your flows.
-   **Check where documents come from.** If an agent read uploaded files, open it in the editor and confirm its files point at the document links the flow receives.
-   **Decide how the flow starts.** In Agent Builder, a person typed into a chat. Here it can be an API call from your app, a form, an incoming email, or a schedule.
-   **Start the flow,** if the builder left it stopped.

## 5\. Test, then switch over

Run each flow with a few of the messages you used to test it in Agent Builder’s Preview. With Prompt to Flow connected, you can ask your AI tool to run it, for example “Run my Planning helper flow with: We want to launch a customer referral program.” Compare the answers with what Agent Builder gave you. When they match, point your app at the flow and turn the Agent Builder workflow off.

## Six real conversions: OpenAI’s own templates

We started from six of the templates OpenAI ships in Agent Builder, exported each one as Agents SDK code in TypeScript, and converted it with the request from step 3 in Claude Code with FlowRunner Prompt to Flow connected. Two of them had Web Search, which had to come off before the export would work. Each section below shows the template in Agent Builder first, then the flow FlowRunner Prompt to Flow built from its code.

We ran the four that return an answer with real inputs, and the results are below. Three decisions applied to all six. Each flow starts from an API call. Web search goes through Tavily. Human steps go by email, and switching them to Slack is a change to one block.

| Template | What came across | What we decided |
| --- | --- | --- |
| Data Enrichment | Two agents and their output fields | Added web search, which the export dropped |
| Structured Data Q&A | Moderation, domain routing, query agents | Moderation checks the real input, not the garbled export |
| Internal Knowledge Assistant | Query rewrite, classification, three paths | Web search in place of code interpreter |
| Planning Helper | Triage and the two paths | A missing detail returns a question to the caller |
| Customer Service | Jailbreak check, classification, three agents | A real approval by email; retention offers from a code step |
| Document Comparison | Triage, proposal, approval, three other paths | A real approve or reject by email; the approved reply saved as a Gmail draft |

### Data Enrichment

You name a company and a topic. One agent searches the web and returns the companies it finds. A second agent turns that into a single profile with seven fields: name, industry, headquarters, size, website, description, and founded year.

![OpenAI's Data enrichment template in Agent Builder: Start, Web research agent, and Summarize and display, with notes describing each step and the example input Analyze NVDA.](https://flowrunner.ai/images/blog/agent-builder-conversions/data-enrichment-agent-builder.webp)

![The same workflow as a FlowRunner flow: Start, Web research agent with a web search tool attached, Summarize and display, and Return company profile.](https://flowrunner.ai/images/blog/agent-builder-conversions/data-enrichment-flowrunner.webp)

**What changed:** the template tells its first agent to “use web search”, but the exported code gives it no tools at all. The flow attaches a web search tool to that agent, so it actually searches.

**Tested:** asked about FlowRunner, the flow searched the web and returned one profile with all seven fields filled in.

### Structured Data Q&A

You ask an analytics question in plain words. A moderation check screens it, an agent decides whether it’s about commerce or personnel data, and two more agents write a query against that domain’s schema and return sample results. As in OpenAI’s template, the last step invents the results. Connecting a real database is the next step for anyone using it.

![OpenAI's Structured Data Q/A template in Agent Builder: Start, a Guardrails node with Pass and Fail, Select domain, a Condition on the parsed domain with commerce, personnel and Else branches, and a create query agent and an execute query agent for each domain.](https://flowrunner.ai/images/blog/agent-builder-conversions/structured-data-qa-agent-builder.webp)

![The FlowRunner flow: a Moderation check condition whose Yes branch returns blocked, Select domain, a Route by domain router with Commerce, Personnel and Everything Else paths, and create query, execute query and return blocks on each domain path.](https://flowrunner.ai/images/blog/agent-builder-conversions/structured-data-qa-flowrunner.webp)

**What changed:** in the export, the moderation step’s input is a 32,809-character escaped string with a broken reference where the user’s message should be, so it never checked anything. The flow’s moderation check is a Condition with an AI Question that reads the actual question.

**Tested:** “Which product categories had the highest revenue last quarter?” went to the commerce path and came back with a SQL query and ten sample categories. “How many employees in the engineering department were hired in 2025?” went to the personnel path. A request for instructions to hurt a coworker was stopped by the moderation check and returned `"blocked": true`.

### Internal Knowledge Assistant

An agent rewrites the question to be more specific, a second one classifies it as Q&A or fact finding, and the flow sends it down one of three paths: an internal answer, external fact finding, or a request for more detail.

![OpenAI's Internal knowledge assistant template in Agent Builder: Start, Query rewrite, Classify, and an If node whose Q&A, Fact finding and Else branches lead to Internal Q&A, External fact finding, and a generic Agent.](https://flowrunner.ai/images/blog/agent-builder-conversions/internal-knowledge-assistant-agent-builder.webp)

![The FlowRunner flow: Query rewrite, Classify, and a Route by procedure router whose Q&A, Fact finding and Everything Else paths lead to Internal Q&A and External fact finding, both with a web search tool, and Ask for more detail, each followed by a Return block.](https://flowrunner.ai/images/blog/agent-builder-conversions/internal-knowledge-assistant-flowrunner.webp)

**What changed:** the export’s classify step reads `input.output_text`, which is never defined, so the code fails before it classifies anything. The flow passes the rewritten question, which is what the template means. Code interpreter has no FlowRunner equivalent, so the fact-finding agent uses web search instead. Two agents had Web Search removed for the export, and the flow gives them web search again.

**Tested:** “What is the current US federal minimum wage, and when did it last change?” was classified as Q&A and answered: $7.25 an hour, last changed July 24, 2009.

### Planning Helper

You describe a business initiative. A triage agent checks for three details: the goal, the timeframe, and the resources. If all three are there, a second agent searches the web and writes a plan with opportunities, risks, and mitigations. If any is missing, a third agent asks for it.

![OpenAI's Planning helper template in Agent Builder: Start, Triage, a Condition checking has\_all\_details, and the Launch helper and Get data agents.](https://flowrunner.ai/images/blog/agent-builder-conversions/planning-helper-agent-builder.webp)

![The FlowRunner flow: Triage, an All details provided? condition, Launch helper with a web search tool on Yes and Get data on No, each ending in a Return block.](https://flowrunner.ai/images/blog/agent-builder-conversions/planning-helper-flowrunner.webp)

**What changed:** the export’s output schema spells one field `initative_goal` while the instructions ask for `initiative_goal`, and the flow uses the correct spelling throughout. In Agent Builder, the follow-up question appears in the chat and the user answers in the next message. A flow takes one request, so the flow returns the question to the caller, and the caller runs it again with the details added.

**Tested:** with only “We want to launch a customer referral program”, the flow came back with:

```
{"status":"needs_details","question":"Thanks. To finalize the plan, please provide:\n- Target completion date or timeframe (e.g., “MVP by Jan 31” or “launch in Q1”)\n- Available resources/capacity (e.g., team/headcount by role, budget, and tool access like CRM, email/SMS, referral software)"}
```

With a date, a half-time marketer, a $15,000 budget, and HubSpot added, it returned a seven-part plan with a timeline, a budget split, and three risks with mitigations.

### Customer Service

A jailbreak check screens the message, an agent classifies it as a return, a cancellation, or a question, and a different agent handles each one. Returns need the customer’s approval before anything ships.

![OpenAI's Customer service template in Agent Builder: Start, Jailbreak guardrail, Classification agent, a Condition with return, cancel and information branches, the Return, Retention and Information agents, and a User approval node after the Return agent whose Approve and Reject outputs lead to End.](https://flowrunner.ai/images/blog/agent-builder-conversions/customer-service-agent-builder.webp)

![The FlowRunner flow: Jailbreak check, Classification agent, and a Route by intent router. The cancel path runs Look up retention offers before the Retention Agent, the information path answers by email, and the return path emails the offer, waits for the customer's answer, and branches on Customer said yes? to a confirmation or a what-else email.](https://flowrunner.ai/images/blog/agent-builder-conversions/customer-service-flowrunner.webp)

**What changed:** the export’s approval is `return true`, so every return was approved without asking anyone. In the flow, the return agent writes the offer, an email sends it to the customer with Yes and No links, and the run pauses until they click one. Yes sends the confirmation, and No asks what else they need. The retention tool came out of the export as an empty TODO. In the flow, a code step looks up the available offers before the retention agent runs, and the agent is told to offer only those. That way it can’t invent a discount.

### Document Comparison

You send two documents. With no question, an agent proposes one way to reconcile the differences and the proposal goes to you for approval. With a question, an agent answers it from the documents. With fewer than two, the flow asks for them.

![OpenAI's Document comparison template in Agent Builder: Start, Triage request, an If/else with compare, answer\_question and Else branches, Propose reconciliation followed by a Binary approval node leading to the Approval agent or the Rejection agent, plus Provide explanation and Retry agent.](https://flowrunner.ai/images/blog/agent-builder-conversions/document-comparison-agent-builder.webp)

![The FlowRunner flow: Triage request and a Route by request type router. The Compare path runs Propose reconciliation, emails the proposal for approval, waits for approve or reject, and branches on Approved? to the Approval agent and a Gmail draft, or to the Rejection agent. The other paths run Provide explanation and Retry agent.](https://flowrunner.ai/images/blog/agent-builder-conversions/document-comparison-flowrunner.webp)

**What changed:** the export’s approval stub always returns `true`, so the rejection agent could never run, and the uploaded documents aren’t part of the exported input. The flow takes two document links, emails the proposal with Approve and Reject links, and waits. On approve, an agent drafts the reply to the other party and saves it as a Gmail draft for you to send. On reject, an agent explains why. The template’s sample email body, a note asking about “the ChatKit roadmap”, didn’t come across.

## What this means if you’re moving

All six converted, including the ones whose code wouldn’t run. Several came out more complete than their exports, because the approvals and tools the export left as stubs are real steps in the flow. What took judgment was small: where approvals go, what a stubbed tool should do, and how a chat follow-up works when there’s no chat.

If you have Agent Builder workflows to move, [start on the Free plan](https://flowrunner.ai/pricing), connect Prompt to Flow, and convert one this week. November 30 is five weeks away.

## Frequently asked questions

### Can I import an Agent Builder workflow into FlowRunner?

Yes, through FlowRunner Prompt to Flow. Copy the workflow's code from Agent Builder (Code, then Agents SDK), paste it into your AI tool with Prompt to Flow connected, and it builds the same workflow as a FlowRunner flow in your workspace.

### Does the exported code have to run?

No. Prompt to Flow reads the code to learn what the workflow does: the agents, their instructions and models, the branches, and the tools. Several exports we tried would not run as exported, and they still converted, because the builder asks about anything the code leaves out.

### Do my agents keep using OpenAI models?

Yes, if you want them to. FlowRunner uses your own API key for each AI provider, so the converted agents keep their OpenAI models. You can also switch any agent to another provider later.

### What happens to Agent Builder's human approval step?

It becomes a real approval. The flow sends the request by email or Slack with approve and reject links, pauses the run, and continues down the matching path when the person answers.

By [Mark Piller](https://flowrunner.ai/about#mark-piller), Founder of FlowRunner [Editorial policy](https://flowrunner.ai/editorial-policy)

---
Markdown version of https://flowrunner.ai/blog/openai-agent-builder-to-flowrunner-conversions. Site index: https://flowrunner.ai/llms.txt
