diff --git a/apps/sim/app/(landing)/comparisons/[provider]/page.tsx b/apps/sim/app/(landing)/comparisons/[provider]/page.tsx
index e84a9667843..d2908ba2d2f 100644
--- a/apps/sim/app/(landing)/comparisons/[provider]/page.tsx
+++ b/apps/sim/app/(landing)/comparisons/[provider]/page.tsx
@@ -11,6 +11,7 @@ import { BrandIconTile, SimIconTile } from '@/app/(landing)/comparisons/componen
import { ComparisonCards } from '@/app/(landing)/comparisons/components/comparison-cards'
import { ComparisonLinkRow } from '@/app/(landing)/comparisons/components/comparison-link-row'
import { ComparisonTable } from '@/app/(landing)/comparisons/components/comparison-table'
+import { MigrationSection } from '@/app/(landing)/comparisons/components/migration-section'
import { ProseText } from '@/app/(landing)/comparisons/components/prose-text'
import { getLibraryPostsForCompetitor } from '@/app/(landing)/comparisons/library-links'
import {
@@ -61,8 +62,10 @@ export async function generateMetadata({
}
return buildLandingMetadata({
- title: `Sim vs ${competitor.name} | Sim, the AI Workspace`,
- description: `Compare Sim, the open-source AI workspace, to ${competitor.name} on platform, AI, integrations, pricing, security, and support. Sourced and dated facts.`,
+ title: competitor.seoTitle ?? `Sim vs ${competitor.name} | Sim, the AI Workspace`,
+ description:
+ competitor.seoDescription ??
+ `Compare Sim, the open-source AI workspace, to ${competitor.name} on platform, AI, integrations, pricing, security, and support. Sourced and dated facts.`,
path: `/comparisons/${competitor.id}`,
keywords: [
`Sim vs ${competitor.name}`,
@@ -215,6 +218,12 @@ export default async function ComparisonProviderPage({
+ {competitor.migration ? (
+ <>
+
+
+ >
+ ) : null}
{competitor.betterThanAnswer ? (
<>
diff --git a/apps/sim/app/(landing)/comparisons/components/migration-section/index.ts b/apps/sim/app/(landing)/comparisons/components/migration-section/index.ts
new file mode 100644
index 00000000000..8fb62439a04
--- /dev/null
+++ b/apps/sim/app/(landing)/comparisons/components/migration-section/index.ts
@@ -0,0 +1 @@
+export { MigrationSection } from './migration-section'
diff --git a/apps/sim/app/(landing)/comparisons/components/migration-section/migration-section.tsx b/apps/sim/app/(landing)/comparisons/components/migration-section/migration-section.tsx
new file mode 100644
index 00000000000..3eb1e3d1c64
--- /dev/null
+++ b/apps/sim/app/(landing)/comparisons/components/migration-section/migration-section.tsx
@@ -0,0 +1,87 @@
+import type { CompetitorMigration } from '@/lib/compare/data'
+import { ProseText } from '@/app/(landing)/comparisons/components/prose-text'
+import { ProseLink } from '@/app/(landing)/components/prose-page'
+
+interface MigrationSectionProps {
+ migration: CompetitorMigration
+}
+
+const HEADING_CLASS =
+ 'mb-4 text-[var(--text-primary)] text-xl leading-[100%] tracking-[-0.02em] lg:text-2xl'
+const BODY_CLASS = 'max-w-[720px] text-[var(--text-body)] text-small leading-[150%]'
+
+/**
+ * Where to go when the competitor shuts down, as a two-column destinations table, then the
+ * ordered steps for moving to Sim. Server-rendered, so answer engines read the table and steps
+ * without hydration.
+ */
+export function MigrationSection({ migration }: MigrationSectionProps) {
+ return (
+ <>
+
+
+ {migration.heading}
+
+
+
+
+
+
+ {migration.heading}
+
+
+
+
+
+
+ |
+ Destination
+ |
+
+ Choose it when
+ |
+
+
+
+ {migration.options.map((option) => (
+
+ |
+ {option.name}
+ |
+
+ {option.fitsWhen}
+ |
+
+ ))}
+
+
+
+
+
+
+ {migration.stepsHeading}
+
+
+ {migration.steps.map((step, index) => (
+ -
+
+
+ ))}
+
+
+ >
+ )
+}
diff --git a/apps/sim/content/library/openai-vs-n8n-vs-sim/index.mdx b/apps/sim/content/library/openai-vs-n8n-vs-sim/index.mdx
index a995f4c49f3..b0a0715a8b0 100644
--- a/apps/sim/content/library/openai-vs-n8n-vs-sim/index.mdx
+++ b/apps/sim/content/library/openai-vs-n8n-vs-sim/index.mdx
@@ -5,7 +5,7 @@ description: 'Sim vs n8n vs OpenAI AgentKit: how an agent-first, an automation-f
seoTitle: 'Sim vs n8n vs OpenAI AgentKit: Which to Use in 2026?'
seoDescription: 'Sim, n8n and OpenAI AgentKit compared on model choice, self-hosting, licensing and pricing, with fit guidance for each type of team.'
date: 2025-10-06
-updated: 2026-10-24
+updated: 2026-10-29
authors:
- emir
readingTime: 18
@@ -103,7 +103,7 @@ This page compares the three architectures. For a detailed two-way breakdown of
## TL;DR
-Choose **Sim** when agents and LLM workflows are the product, you want a visual workflow builder, and ownership of Sim's Apache 2.0 core matters, subject to the [separate license for `apps/sim/ee`](https://github.com/simstudioai/sim/blob/main/apps/sim/ee/LICENSE). Choose **n8n** when conventional app integrations, triggers, data movement, and operational automation are the center of the workflow. Choose **OpenAI AgentKit** when your application is committed to OpenAI models and current platform services, but do not start a new architecture around Agent Builder or the Evals platform, which [OpenAI has scheduled to shut down on November 30, 2026](https://openai.com/index/introducing-agentkit/).
+Choose **Sim** when agents and LLM workflows are the product, you want a visual workflow builder, and ownership of Sim's Apache 2.0 core matters, subject to the [separate license for `apps/sim/ee`](https://github.com/simstudioai/sim/blob/main/apps/sim/ee/LICENSE). Choose **n8n** when conventional app integrations, triggers, data movement, and operational automation are the center of the workflow. Choose **OpenAI AgentKit** when your application is committed to OpenAI models and current platform services, but do not start a new architecture around Agent Builder or the Evals platform, which [OpenAI has scheduled to shut down on November 30, 2026](https://developers.openai.com/api/docs/deprecations).
## What is the difference between Sim, n8n, and OpenAI AgentKit?
@@ -210,7 +210,7 @@ OpenAI AgentKit is best understood as a family of OpenAI-native agent capabiliti

-This comparison requires an important October 2026 qualification: OpenAI is deprecating Agent Builder and the Evals platform. Agent Builder is scheduled to shut down on November 30, 2026; the Evals platform becomes read-only on October 31, 2026 and is also scheduled to shut down on November 30. OpenAI recommends exporting Agent Builder workflows to the Agents SDK or moving to Workspace Agents, while programmatic evals continue through the Evals API. These dates and migration paths come from OpenAI's [Agent Builder migration guide](https://developers.openai.com/api/docs/guides/agent-builder/migrate-from-agent-builder) and [Evals documentation](https://developers.openai.com/api/docs/guides/evals).
+This comparison requires an important October 2026 qualification: OpenAI is deprecating Agent Builder and the Evals platform. Agent Builder is scheduled to shut down on November 30, 2026; the Evals platform becomes read-only on October 31, 2026, and its dashboard and API are also scheduled to shut down on November 30. OpenAI recommends exporting Agent Builder workflows to the Agents SDK or moving to Workspace Agents. These dates and migration paths come from OpenAI's [Agent Builder migration guide](https://developers.openai.com/api/docs/guides/agent-builder/migrate-from-agent-builder) and [deprecations page](https://developers.openai.com/api/docs/deprecations). For a head-to-head view and step-by-step migration to Sim, see the [Sim vs OpenAI AgentKit comparison](https://www.sim.ai/comparisons/openai-agentkit).
OpenAI's remaining stack fits teams already using OpenAI models and services. Application code built with the Agents SDK may run in a team's own environment, while managed models, tools, and platform capabilities remain OpenAI services.
diff --git a/apps/sim/lib/compare/data/competitors/openai-agentkit.ts b/apps/sim/lib/compare/data/competitors/openai-agentkit.ts
index c621e8a4d10..c953cd807e0 100644
--- a/apps/sim/lib/compare/data/competitors/openai-agentkit.ts
+++ b/apps/sim/lib/compare/data/competitors/openai-agentkit.ts
@@ -32,13 +32,160 @@ export const openaiAgentkitProfile: CompetitorProfile = {
},
oneLiner:
"OpenAI AgentKit bundled a visual Agent Builder, ChatKit embeddable chat UI, Connector Registry, Guardrails, and Evals for building agentic workflows on OpenAI's models. But OpenAI is winding down Agent Builder and Evals, with full shutdown November 30, 2026, in favor of the code-first Agents SDK or ChatGPT Workspace Agents.",
+ seoTitle: 'Sim vs OpenAI AgentKit: Agent Builder Shutdown Migration',
+ seoDescription:
+ 'OpenAI Agent Builder shuts down November 30, 2026. Compare Sim and OpenAI AgentKit, pick a migration path, and move your workflows to Sim.',
+ leadAnswer: [
+ "OpenAI is shutting down Agent Builder, the visual canvas in AgentKit, on November 30, 2026, and the Evals platform shuts down the same day. ChatKit and the Agents SDK remain, and OpenAI's migration guide points teams to the code-first Agents SDK or ChatGPT Workspace Agents. Sim, the open-source AI workspace, fits teams that want to keep a visual workflow canvas: rebuild the workflow in Sim, keep running it on OpenAI models or switch providers, and deploy it as an API, a chat, or an MCP tool.",
+ ],
+ migration: {
+ heading: 'What to migrate to when OpenAI Agent Builder shuts down',
+ answer: [
+ 'Agent Builder stops working on November 30, 2026. Before then, export each workflow as Agents SDK code; ',
+ {
+ text: 'OpenAI notes',
+ href: 'https://developers.openai.com/api/docs/guides/agent-builder/migrate-from-agent-builder',
+ },
+ ' that the export does not convert the workflow graph, and that some behavior needs manual recreation. ',
+ {
+ text: 'ChatKit stays available',
+ href: 'https://developers.openai.com/api/docs/guides/chatkit',
+ },
+ ', but a ChatKit embed backed by an Agent Builder workflow needs your own server-side agent once Agent Builder is gone. Choose the destination by who maintains the agent and how deterministic it must be.',
+ ],
+ options: [
+ {
+ name: 'OpenAI Agents SDK',
+ fitsWhen:
+ 'Your developers want to keep the exported Python or TypeScript code, stay on OpenAI models, and run the agent inside an application they deploy and operate themselves.',
+ source: {
+ url: 'https://developers.openai.com/api/docs/guides/agent-builder/migrate-from-agent-builder',
+ label: 'OpenAI API: Migrate from Agent Builder',
+ asOf: '2026-10-29',
+ },
+ },
+ {
+ name: 'ChatGPT Workspace Agents',
+ fitsWhen:
+ 'Your team works in a ChatGPT Business, Enterprise, or Edu workspace and wants agents built in natural language and shared there. OpenAI warns that workflows with strong determinism may not migrate faithfully.',
+ source: {
+ url: 'https://developers.openai.com/api/docs/guides/agent-builder/migrate-from-agent-builder',
+ label: 'OpenAI API: Migrate from Agent Builder',
+ asOf: '2026-10-29',
+ },
+ },
+ {
+ name: 'LangGraph',
+ fitsWhen:
+ 'Your developers want low-level control of a stateful agent graph in open-source code, mixing hand-coded and model-driven steps, and accept building the hosting, monitoring, and interface around it.',
+ source: {
+ url: 'https://docs.langchain.com/oss/python/langgraph/overview',
+ label: 'LangGraph overview',
+ asOf: '2026-10-29',
+ },
+ },
+ {
+ name: 'CrewAI',
+ fitsWhen:
+ 'Your developers want an open-source framework for teams of collaborating agents in code, and accept building the hosting, monitoring, and interface around it.',
+ source: {
+ url: 'https://docs.crewai.com/en/introduction',
+ label: 'CrewAI introduction',
+ asOf: '2026-10-29',
+ },
+ },
+ {
+ name: 'Microsoft Copilot Studio',
+ fitsWhen:
+ "Your organization standardizes on Microsoft 365 and wants agents built and governed in Microsoft's low-code agent builder.",
+ source: {
+ url: 'https://learn.microsoft.com/en-us/microsoft-copilot-studio/fundamentals-what-is-copilot-studio',
+ label: 'Microsoft Learn: What is Copilot Studio',
+ asOf: '2026-10-29',
+ },
+ },
+ {
+ name: 'Sim',
+ fitsWhen:
+ "Your team wants to keep a visual canvas, mix agent steps with deterministic logic in one workflow, choose among model providers including OpenAI, and deploy without building its own hosting, in Sim's cloud or self-hosted.",
+ source: {
+ url: 'https://docs.sim.ai/introduction',
+ label: 'Sim Docs: Introduction',
+ asOf: '2026-10-29',
+ },
+ },
+ ],
+ stepsHeading: 'How to migrate an Agent Builder workflow to Sim',
+ steps: [
+ [
+ "Before November 30, 2026, open each workflow in Agent Builder, select Code, and copy the Agents SDK export. Note every agent's instructions, model, and tools, and the typed inputs and outputs between nodes.",
+ ],
+ [
+ 'Rebuild the graph on the Sim canvas, or describe it to Sim in plain language and refine the result. Agent nodes become ',
+ { text: 'Agent blocks', href: 'https://docs.sim.ai/workflows/blocks/agent' },
+ ', If/else becomes a ',
+ { text: 'Condition block', href: 'https://docs.sim.ai/workflows/blocks/condition' },
+ ', While becomes a ',
+ { text: 'Loop', href: 'https://docs.sim.ai/workflows/blocks/loop' },
+ ', Human approval becomes a ',
+ { text: 'Human block', href: 'https://docs.sim.ai/workflows/blocks/human-in-the-loop' },
+ ', and Guardrails becomes the ',
+ { text: 'Guardrails block', href: 'https://docs.sim.ai/workflows/blocks/guardrails' },
+ '.',
+ ],
+ [
+ 'Add your OpenAI API key to keep the same models, or switch any step to another provider. ',
+ {
+ text: 'Calls made with your own key',
+ href: 'https://docs.sim.ai/platform/costs#bring-your-own-key-byok',
+ },
+ " skip Sim's model usage charge.",
+ ],
+ [
+ 'Reconnect tools: point MCP nodes at the same servers through ',
+ { text: "Sim's MCP tools", href: 'https://docs.sim.ai/agents/mcp' },
+ ', and move the documents behind File search into a ',
+ { text: 'Sim knowledge base', href: 'https://docs.sim.ai/knowledgebase' },
+ '.',
+ ],
+ [
+ 'Run the inputs you used in Agent Builder Preview through the Sim workflow and compare the results before switching traffic.',
+ ],
+ [
+ { text: 'Deploy the workflow', href: 'https://docs.sim.ai/workflows/deployment' },
+ ' as an API, a chat, or an MCP tool, or start it from a schedule or webhook, then point your application at the Sim deployment.',
+ ],
+ ],
+ },
+ faqs: [
+ {
+ question: 'Is OpenAI AgentKit shutting down, and what should I migrate my agents to?',
+ answer:
+ "Part of OpenAI AgentKit is shutting down: Agent Builder and the Evals platform stop on November 30, 2026, while ChatKit and the Agents SDK remain. OpenAI's own migration paths are the Agents SDK for code and ChatGPT Workspace Agents for natural-language agents in ChatGPT. Sim fits teams that want to keep a visual workflow canvas, combine agent and deterministic steps, and choose among model providers, including OpenAI.",
+ },
+ {
+ question: 'When does OpenAI Agent Builder shut down?',
+ answer:
+ 'OpenAI Agent Builder is scheduled to shut down on November 30, 2026, after a deprecation OpenAI announced on June 3, 2026. Existing evals become read-only on October 31, 2026, and the Evals dashboard and API shut down on November 30, 2026. A workflow rebuilt in Sim is unaffected by either date and can keep calling OpenAI models with your own API key.',
+ },
+ {
+ question: 'How much does OpenAI AgentKit cost?',
+ answer:
+ "OpenAI AgentKit has no plan of its own. You pay API rates for the models a workflow calls, plus built-in tools: web search costs $10 per 1,000 calls, and file search costs $2.50 per 1,000 calls plus $0.10 per GB per day of storage after the first 1 GB. Sim's paid plans are priced per user with included usage credits, and calls made with your own provider key skip Sim's model usage charge, though a base per-run charge still applies.",
+ },
+ ],
+ chooseCompetitorAnswer:
+ "Choose OpenAI's Agents SDK, the code-first part of AgentKit that remains after Agent Builder shuts down on November 30, 2026, if your developers want to own the agent in Python or TypeScript and stay on OpenAI's models.",
sectionIntros: {
platform: [
'Sim offers a visual builder, supported self-hosting, and promotion across environments. OpenAI Agent Builder is a hosted visual canvas that OpenAI is retiring, leaving the code-first Agents SDK as its successor.',
],
pricing: [
+ 'OpenAI AgentKit has no plan of its own: workflows pay ',
+ { text: 'API rates', href: 'https://developers.openai.com/api/docs/pricing' },
+ ' for model tokens and built-in tools, such as web search at $10 per 1,000 calls and file search at $2.50 per 1,000 calls. ',
{ text: 'Sim combines a per-user subscription', href: '/pricing' },
- ' with usage credits and bring-your-own-key exemptions, while OpenAI charges for model tokens and tools without a dedicated AgentKit plan. Estimate workflow volume, token consumption, and paid tool calls when comparing total cost.',
+ ' with usage credits and bring-your-own-key exemptions. Estimate workflow volume, token consumption, and paid tool calls when comparing total cost.',
],
security: [
'OpenAI publishes a broader certification portfolio, while Sim provides more direct infrastructure control through ',
@@ -89,9 +236,9 @@ export const openaiAgentkitProfile: CompetitorProfile = {
'ChatKit ships prebuilt widget nodes (cards, lists, forms, buttons), theming, file attachments, and chain-of-thought visualization for embedding chat-based agents into a product. Unlike Agent Builder and Evals, ChatKit itself is not being deprecated, but its managed-backend integration is being eliminated in the Agent Builder winddown, leaving only the self-hosted-backend path supported.',
shortDescription: 'Embeddable chat UI with prebuilt widgets, theming, and file attachments.',
source: {
- url: 'https://community.openai.com/t/deprecation-notice-agent-builder/1382650',
- label: 'OpenAI Community: Deprecation notice - Agent Builder',
- asOf: '2026-07-02',
+ url: 'https://developers.openai.com/api/docs/guides/chatkit',
+ label: 'OpenAI API: ChatKit',
+ asOf: '2026-10-29',
},
},
{
@@ -113,9 +260,9 @@ export const openaiAgentkitProfile: CompetitorProfile = {
'OpenAI announced in June 2026 that it is winding down Agent Builder (the visual no-code canvas) and the Evals platform. Evals goes read-only October 31, 2026, and both are fully unavailable November 30, 2026. The visual/no-code building experience central to AgentKit as originally announced is being discontinued in favor of the code-first Agents SDK or ChatGPT Workspace Agents.',
shortDescription: 'Visual builder and evals platform shut down November 30, 2026.',
source: {
- url: 'https://community.openai.com/t/deprecation-notice-agent-builder/1382650',
- label: 'OpenAI Community: Deprecation notice - Agent Builder',
- asOf: '2026-07-02',
+ url: 'https://developers.openai.com/api/docs/deprecations',
+ label: 'OpenAI API: Deprecations (Agent Builder and Evals)',
+ asOf: '2026-10-29',
},
},
{
@@ -125,9 +272,9 @@ export const openaiAgentkitProfile: CompetitorProfile = {
shortDescription:
'Self-hosting requires running ChatKit on your own infrastructure entirely.',
source: {
- url: 'https://community.openai.com/t/deprecation-notice-agent-builder/1382650',
- label: 'OpenAI Community: Deprecation notice - Agent Builder',
- asOf: '2026-07-02',
+ url: 'https://developers.openai.com/api/docs/guides/chatkit',
+ label: 'OpenAI API: ChatKit',
+ asOf: '2026-10-29',
},
},
{
@@ -154,9 +301,9 @@ export const openaiAgentkitProfile: CompetitorProfile = {
confidence: 'verified',
sources: [
{
- url: 'https://community.openai.com/t/deprecation-notice-agent-builder/1382650',
- label: 'OpenAI Community: Deprecation notice - Agent Builder',
- asOf: '2026-07-02',
+ url: 'https://developers.openai.com/api/docs/guides/agent-builder',
+ label: 'OpenAI API: Agent Builder',
+ asOf: '2026-10-29',
},
{
url: 'https://developers.openai.com/api/docs/guides/agents',
@@ -182,9 +329,9 @@ export const openaiAgentkitProfile: CompetitorProfile = {
confidence: 'verified',
sources: [
{
- url: 'https://community.openai.com/t/deprecation-notice-agent-builder/1382650',
- label: 'OpenAI Community: Deprecation notice - Agent Builder',
- asOf: '2026-07-02',
+ url: 'https://developers.openai.com/api/docs/guides/chatkit',
+ label: 'OpenAI API: ChatKit',
+ asOf: '2026-10-29',
},
],
},
@@ -490,9 +637,9 @@ export const openaiAgentkitProfile: CompetitorProfile = {
asOf: '2026-07-02',
},
{
- url: 'https://community.openai.com/t/deprecation-notice-agent-builder/1382650',
- label: 'OpenAI Community: Deprecation notice - Agent Builder',
- asOf: '2026-07-02',
+ url: 'https://developers.openai.com/api/docs/deprecations',
+ label: 'OpenAI API: Deprecations (Agent Builder and Evals)',
+ asOf: '2026-10-29',
},
],
},
diff --git a/apps/sim/lib/compare/data/index.ts b/apps/sim/lib/compare/data/index.ts
index 058e2e17630..fe98fe9e6ff 100644
--- a/apps/sim/lib/compare/data/index.ts
+++ b/apps/sim/lib/compare/data/index.ts
@@ -22,6 +22,7 @@ export { simProfile } from '@/lib/compare/data/sim'
export type {
ComparisonFacts,
CompetitorBrand,
+ CompetitorMigration,
CompetitorProfile,
Fact,
FactSource,
diff --git a/apps/sim/lib/compare/data/types.ts b/apps/sim/lib/compare/data/types.ts
index 60ba1f9cbb7..04715fdf327 100644
--- a/apps/sim/lib/compare/data/types.ts
+++ b/apps/sim/lib/compare/data/types.ts
@@ -209,6 +209,24 @@ export interface CompetitorBrand {
asOf: string
}
+/**
+ * Guidance for buyers who must leave a product its vendor is shutting down: where they can
+ * go, then how to move to Sim. The page renders it ahead of the feature comparison, because
+ * the deadline, not the feature set, is what those readers came for.
+ */
+export interface CompetitorMigration {
+ /** Heading for the destinations table, phrased as the buyer asks it. */
+ heading: string
+ /** Answer-first: what shuts down and when, what keeps working, and how to choose. */
+ answer: Prose
+ /** Each realistic destination, Sim among them, with the team it fits. */
+ options: Array<{ name: string; fitsWhen: string; source: FactSource }>
+ /** Heading for {@link CompetitorMigration.steps}. */
+ stepsHeading: string
+ /** Ordered steps for rebuilding the product's workflows in Sim. */
+ steps: Prose[]
+}
+
/** One competitor (or Sim itself) as a comparable profile. */
export interface CompetitorProfile {
/** kebab-case identifier, e.g. "n8n", "openai-agentkit". */
@@ -245,6 +263,16 @@ export interface CompetitorProfile {
* products so it can be quoted on its own.
*/
faqs?: Array<{ question: string; answer: string }>
+ /**
+ * Replaces the generated `Sim vs {name} | Sim, the AI Workspace` search title, at most 60
+ * characters. Set it when buyers search this competitor for one time-sensitive reason, such
+ * as a shutdown, that the generated title does not name.
+ */
+ seoTitle?: string
+ /** Replaces the generated search description, at most 160 characters. Pairs with {@link seoTitle}. */
+ seoDescription?: string
+ /** Set when the vendor is shutting the product down. See {@link CompetitorMigration}. */
+ migration?: CompetitorMigration
/**
* One-sentence lead-in per comparison-table section, stating what that
* section covers so the section is quotable without the rest of the page.
diff --git a/apps/sim/scripts/test-landing-seo-e2e.ts b/apps/sim/scripts/test-landing-seo-e2e.ts
index 3903fa51d3c..bbde6787ee1 100644
--- a/apps/sim/scripts/test-landing-seo-e2e.ts
+++ b/apps/sim/scripts/test-landing-seo-e2e.ts
@@ -14,6 +14,7 @@ import {
gumloopProfile,
langflowProfile,
n8nProfile,
+ openaiAgentkitProfile,
openClawProfile,
pipedreamProfile,
vellumProfile,
@@ -401,6 +402,7 @@ async function run() {
langflowProfile,
pipedreamProfile,
openClawProfile,
+ openaiAgentkitProfile,
]) {
const { status, body } = await get(`/comparisons/${profile.id}`)
if (status !== 200) {
@@ -419,6 +421,20 @@ async function run() {
if (expected.length === 0 || questions.join('|') !== expected.join('|')) {
failures.push(`${profile.id}: FAQPage does not open with the profile FAQs`)
}
+ const migration = profile.migration
+ if (migration) {
+ const comparisonAt = text.indexOf('feature-by-feature comparison')
+ if (comparisonAt < 0) {
+ failures.push(`${profile.id}: feature-by-feature comparison heading missing`)
+ } else if (
+ [migration.heading, migration.stepsHeading].some((heading) => {
+ const at = text.indexOf(heading)
+ return at < 0 || at > comparisonAt
+ })
+ ) {
+ failures.push(`${profile.id}: migration section missing or below the feature comparison`)
+ }
+ }
}
assert.deepEqual(failures, [])
})