- Brand
- Leadpages
- Category
- Marketing
- Primary Subcategory
- AI Website Builders
Integration details
Description
Leadpages helps marketers create and update branded landing pages, apply a saved brand kit, preview drafts in the Leadpages editor, and publish pages when asked. It also supports creating and managing recurring blog writers and blog content. A Leadpages account is required; publishing and writer scheduling depend on plan and workspace permissions.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- AI Website Builders
- Secondary Subcategories
- None listed
- Brand
- Leadpages
- Access
- Account required
- First tracked
- 2026-10-30
- Tool count
- 78
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for Leadpages
Get updates when Leadpages’s Discoverability Score or category rank changes.
Competing in ChatGPT AI Website Builders
View Category78 tools agents can invoke
Add one more variant (the next free letter of B, C, D) to a DRAFT page-level A/B test, turning it into a multivariate test. Sends no traffic; launch_experiment starts the test. Limits: at most 4 variants including the original; a 3rd or 4th variant (C/D) needs the multivariate-testing plan feature; not available for section or blog tests. Requires the A/B testing plan feature and an editor role. What happens: a new hidden variant page is created as a copy of the ORIGINAL page (not of Variant B), and the call returns at once with its label, pageId and slug and generating:true. In the background AI then rewrites 2-3 pieces of visible text (the main headline first, then the main call to action) to test a new angle. That generation is charged to the workspace's AI credits (one model call, plus one retry when the first produces nothing usable). `description` only labels the variant; it does not steer the AI. If generation can't produce a change (not enough credits, an error, or nothing usable after the retry) the variant is left identical to the original and its description is prefixed with `[generation-incomplete]` (get_experiment shows it, as generationIncomplete). That flag is permanent: launch_experiment never counts a flagged variant as different from the original, even after you edit it, and refuses to launch while no unflagged variant differs. So for a flagged variant either edit it by hand (edit_page_draft on its pageId) and make sure another variant also differs, or remove it with remove_experiment_variant and add again once credits are available. Check get_experiment a minute later before editing the new variant, so your edit isn't overwritten by the generation landing.
add_experiment_variant
Analyze a website URL and summarize its content, structure, colors, typography, and images as a structured brief. Use this when the user wants to migrate or rebuild their own website, or to study a site's layout and style for design inspiration. When the site is not the user's, use the brief for inspiration only: do not copy its text, images, or other content without the owner's permission.
analyze_url
Set a DRAFT or PAUSED A/B test's name, traffic mode and conversion goal. Changes nothing visitors see; launch_experiment starts (or resumes) the test, and also accepts mode/goal at launch. mode: MANUAL (fixed split, available on every plan with A/B testing), SMART (traffic shifts toward the better variant; needs the smart-traffic plan feature), AUTO (smart traffic plus automatic winner promotion and follow-up tests; needs the auto-optimization plan feature). Blog tests are MANUAL only. A test measured on the ROI event runs MANUAL or AUTO: SMART is stored as MANUAL. primaryGoalType, what counts as a conversion: 'form_submit' (a form submission on the page), 'purchase' (counted as form submissions), 'element_click' (clicks on elements set up as conversions on the page; clickSelectors records which), 'offsite_conversion' (conversions reported to a conversion destination — destinationId required), 'onsite_pageview' (visitors reaching one of your own pages, a thank-you page — targetPageId required), 'roi_event' (Converted: the account's chosen ROI event; draft tests only, and only when the account has one chosen). funnelGroupId (optional, any goal but roi_event) counts only visitors who complete every step of that conversion funnel. Setting a goal replaces the previous goal's settings. A test already measured on the ROI event keeps it. Requires the A/B testing plan feature and an editor role. Returns the test's stored name, status, mode and goal after the change, with a note when something you asked for was not applied.
configure_experiment
Create a DRAFT A/B test on a page you own. A draft sends no traffic anywhere: the order is create_experiment → edit the variants → configure_experiment (goal, mode, name) → launch_experiment, which is the only step that splits live visitors. testScope 'page' (default) tests a whole page: Variant B becomes its own hidden serving page, a copy of the original (or of variantBSourcePageId), and the result gives each variant's pageId and slug — Edit a page-level variant with edit_page_draft on the variant's own pageId (read it first with get_page_draft, includeHtml:true). Variant pages are never published on their own, so that edit stays private and is exactly what the test serves once launch_experiment starts it. Do not use edit_page (it addresses pages by slug, and a slug is only unique per workspace) and never call publish_page_draft or publish_page on a variant page. testScope 'section' tests one element (sectionSelector, a CSS selector that must match on the page); every variant starts as a copy of that element's HTML, returned as section.originalHtml, and you write each variant with update_experiment_variant. testScope 'blog' tests a blog post's body and title (blogPostId; the blog must be on a custom domain, migrated posts are not supported; A/B only, manual split only); Variant B starts as a copy of the post and you write it with update_experiment_variant. testType 'multivariate' creates 1-3 extra variants (B, C, D) up front, each from one `variants` entry; more than one (C/D) needs the multivariate-testing plan feature. All extra variants start identical to the original — no AI generation and no credits here (add_experiment_variant is the AI path). Requires the A/B testing plan feature and an editor (not viewer) role. A page holds one active (draft, running or paused) test at a time: if it already has one, this fails — manage that test instead (list_experiments). Refuses a page that is itself a variant of another test. Returns the experimentId, status, goal type (auto-picked: Converted's ROI event when the account has one chosen, else form submissions when the page has a form, else your default goal; blog tests use link clicks; null means set one with configure_experiment), every variant with its label (and pageId/slug for page-level tests), and the next step.
create_experiment
Create a new public blog; there is no separate blog publication step. Requires the Pro plan or higher. Creates in your default organization unless organizationId is specified.
create_blog
Create a new blog post. Set status to 'PUBLISHED' to publish immediately, or 'DRAFT' (default) to save as draft.
create_blog_post
Create an HTML post template for a blog. Setting isDefault=true replaces the existing default; template selection can affect publicly rendered posts. Must include markers: <!--POST_TITLE-->, <!--POST_CONTENT-->, <!--POST_DATE-->, <!--POST_AUTHOR-->, <!--POST_CATEGORIES-->
create_blog_template
Create a new brand kit with name and optional brand fields (colors, fonts, voice, business info). Setting is_default=true replaces the existing default in that workspace.
create_brand_kit
Create an HTML page in Leadpages. Depending on the plan, the page may be saved as a DRAFT: the result then says published:false, and the page is NOT live until you call publish_page_draft with its pageId, which you should do only when the user asks to publish. Never describe a draft as live. Generates an auto slug by default. Provide a custom slug (requires the Pro plan or higher) to choose the URL or update an existing page at that slug. Creates in your default organization unless organizationId is specified. Use list_organizations to see available orgs.
create_page
Create a NEW private HTML landing-page draft in an authorized workspace. Never publishes, on any plan or brand. Use list_organizations and list_brand_kits/get_brand_kit to choose the workspace and prepare branded HTML. Returns pageId and an authenticated editor link for preview. Creates a new page on every call; do not retry blindly after a timeout. Use publish_page_draft only when the user requests publication.
create_page_draft
Use this when the user asks to set up recurring blog writing. Requires blogs:write and the account's blog-writer feature. Creates a paused writer saving drafts by default. Set enabled=true only when the user asks to start scheduled runs; they consume workspace AI credits. Set publishMode=PUBLISH only when the user explicitly requests automatic publication. Resolve the blog, brief, timezone, cadence, and credit cap first. Same-name identical retries reuse the writer; changed settings require update_blog_writer. Does not write a post immediately.
create_blog_writer
Create a new site collection and a published fallback 404 page. Creates in your default organization unless organizationId is specified.
create_site
Discard an A/B test and its results. Allowed for DRAFT and PAUSED tests, and for a COMPLETED blog-post test (to dismiss it without publishing). A RUNNING test must be paused first (pause_experiment); a COMPLETED page or section test is either closed out with publish_experiment_winner or paused, then deleted. The live page itself is never changed. Variant pages of a page test: from a DRAFT they are KEPT as ordinary pages in the library (renamed with a short suffix, returned here), from a PAUSED test they are deleted along with their version history. Section and blog tests have no variant pages. Not plan-gated. Cannot be undone. Returns what was deleted or kept.
delete_experiment
Delete a blog and its posts. This moves them to Recently Deleted (recoverable for 30 days), not a permanent delete.
delete_blog
Delete a blog post. This moves it to Recently Deleted (recoverable for 30 days), not a permanent delete.
delete_blog_post
Delete a blog post template and its stored HTML. Posts using it fall back to another available template or the built-in layout, including on public pages.
delete_blog_template
Delete an asset from your asset library and its public serving location. Pages or posts using that URL can lose the asset.
delete_library_asset
Delete a page. This moves it to Recently Deleted (recoverable for 30 days), not a permanent delete.
delete_page
Write a variant's content for a SECTION or BLOG A/B test. Changes nothing visitors see on a draft; launch_experiment is what starts the test. Section tests: sectionVariantHtml replaces the tested element's full outer HTML for one variant (variantLabel B, C or D on a multivariate test; B otherwise), optionally with a new description. Allowed on draft, paused or completed tests; refused while the test is RUNNING, because the change would reach live visitors at once — pause_experiment, edit, then launch_experiment to resume. Blog tests: markdown replaces Variant B's whole post body (and title, if given, its title). Draft tests only. Page-level tests have no content here: each variant is its own page. Edit a page-level variant with edit_page_draft on the variant's own pageId (read it first with get_page_draft, includeHtml:true). Variant pages are never published on their own, so that edit stays private and is exactly what the test serves once launch_experiment starts it. Do not use edit_page (it addresses pages by slug, and a slug is only unique per workspace) and never call publish_page_draft or publish_page on a variant page. This tool returns an error naming those pages for a page-level test. Requires the A/B testing plan feature and an editor role. Returns the variant updated and the test's status.
update_experiment_variant
Update an existing blog post. Only provided fields are updated. To set a cover image, first call import_blog_asset to get the asset URL, then pass it as coverImagePath.
edit_blog_post
Apply targeted edits to a page's HTML without rewriting the entire document. Much faster than update_page for small changes. Each edit replaces one exact match of old_text with new_text. old_text must appear exactly once unless occurrence is specified. To delete content, set new_text to empty string. Use update_page only for full rewrites. By default, edits to an already-published page may be saved as a draft; pass publish:true to promote the change to the live page immediately. The response reports the resulting state via `draft` / `published`.
edit_page
Apply targeted replacements to a page's current working copy. Always keeps changes private, including edits to an already-live page. Read get_page_draft(includeHtml:true) first. Returns actual change/failure counts and an authenticated editor link. Does not publish; use publish_page_draft when the user requests it.
edit_page_draft
End an A/B test and declare its winner. The split stops and every visitor sees the ORIGINAL (variant A) again, even when another variant won: completing does not change the live page. To make the winner what visitors see, call publish_experiment_winner afterwards. Declaring a winner fires the account's "A/B test winner declared" integrations (webhooks/automations), so only call it once the user has chosen. Calling it on an already COMPLETED test changes nothing and reports the winner already recorded. Works on RUNNING or PAUSED tests and is not plan-gated. Returns the status, the recorded winner and the page URL.
complete_experiment
Before creating or launching an A/B test, estimate how long it would take to reach a reliable result on this page — the same estimate the editor's A/B Setup panel shows. Use it to set expectations and pick the number of variants: every extra variant splits the same traffic further. Returns the page's unique visitors over the last 7 days (weeklyTraffic), its 30-day conversion rate on the page's goal (baselineRate; null when the page has no goal or no goal data, in which case a 5% default is assumed and baselineMeasured is false), and estimates (variant counts include A): sessions needed per variant and in total to detect a 20% relative lift at 95% confidence / 80% power, estimatedDays at current traffic (null with no traffic), severity (ok; slow = over 42 days; infeasible = over 84 days or no traffic at all), lowTraffic (even a 2-variant test would be slow here) and a one-line warning message (empty when ok). `estimate` is the one for the variantCount you passed; `byVariantCount` compares 2, 3 and 4. Reads only; nothing is created.
estimate_experiment
Quote what a generate_ad call would cost before running it: the number of tiles it would build, a min/max AI-credit band, the amount held up front, and the current balance. Deterministic and free — no generation happens. Use it to confirm the spend with the user first.
estimate_ad_credits
Extract the user's brand identity (colors, fonts, business details) from their own website, so pages and posts can match it. Returns extracted data that can be used to create or update a brand kit. Use it on the user's own site or one they are authorized to represent.
extract_brand_from_url
Register an uploaded page asset after uploading to the URL from create_asset_upload. Pass the same slug, filename, contentType, and storagePath. Returns a public asset URL. If asset limits fail, the uploaded storage object is deleted.
complete_asset_upload
Generate a complete ad campaign from a prompt — creative brief, copy, imagery, and a laid-out creative for every selected platform size. SPENDS AI CREDITS (a worst-case amount is held up front and settled to actuals) and requires the Grow plan or higher. Confirm the cost with the user via estimate_ad_credits first, and don't run several generations to explore options. Returns immediately with an adProjectId; generation continues in the background for roughly 4–6 minutes, so poll get_ad_status until it reports done, then call get_ad. Ground it in the user's own material where possible via pageId / brandKitId. A website URL in the prompt may be crawled; the prompt and selected grounding are sent to generation services. Publishing to Meta or Google, video ads, and tile-level editing are web-editor-only — send the user to the returned editorUrl.
generate_ad
Check your account status: plan, credit balance, resource counts, and features you haven't tried yet. Useful for understanding what you can do next.
get_onboarding_status
Get one ad campaign in full: the creative brief the pipeline wrote, the per-platform ad-manager copy (primary text, headlines, CTA), and every built size. Pass include_html to also inline the creative HTML (compacted, first few platforms) when you need to reason about the markup.
get_ad
Poll a generation kicked off by generate_ad. Returns genStatus plus a `done` flag (true on complete / partial / failed), the credits actually charged once settled, and an error message when it failed. A status ending in _review or 'messaging'/'selecting' means the ad is parked at an interactive gate that only the web editor can advance.
get_ad_status
Analytics totals for the whole workspace — or one site, with siteId — over a date window: page views, unique visitors, sessions, conversions, converted sessions, conversion rate, form submissions, bounces and average scroll depth; a per-day series; top traffic sources, channels, devices and AI-assistant referrals; and the % change against the preceding window of the same length. Use this for "how are my pages doing" questions; then list_page_analytics to see which pages drive the totals. `conversionRate` is converted sessions ÷ sessions (0–1). The reported span is echoed in `window`, already capped to the plan's analytics retention — tell the user when `window.clamped` is true. Same numbers as the dashboard's Analytics → Overview tab.
get_analytics_overview
Get a single blog's details including title, slug, description, author, language (locale; null is English), and whether it has a landing page
get_blog
Get the HTML landing page for a blog
get_blog_landing
Get a blog post's full content including markdown
get_blog_post
Get the full details of a brand kit by ID, including colors, fonts, voice, business info, and URLs for the kit's logos and favicon (primaryLogoUrl, alternateLogoUrl, faviconUrl). To put a brand logo on a page, pass primaryLogoUrl directly to import_asset_from_url — the server detects library URLs and copies bytes from storage, so no filename or fetch round-trip is needed.
get_brand_kit
Get info about a published page. By default returns metadata only (title, slug, url, size, excerpt) — no HTML content. Set includeContent=true to get compact HTML with large inline content replaced by placeholders. Use section to extract a specific part (head, body, meta, style:N, script:N, svg:N). Use offset/length for raw byte-range retrieval. Set compact=false with includeContent=true for full raw HTML (warning: may be very large).
get_page
One page's analytics over a date window: views, unique visitors, sessions, conversions and conversion rate, bounces, load time and engagement; conversions per goal; a per-day series; traffic sources, channels, devices and browsers; and how far down the page visitors scroll. For a page in an A/B test, traffic for every variant is recorded under the original page, so `experimentScope` is set and the totals cover the whole test. The reported span is echoed in `window`, capped to the plan's analytics retention — tell the user when `window.clamped` is true. Same numbers as the editor's Insights panel.
get_page_analytics
Import an asset from a public URL or copy an accessible first-party asset to a page. The stored asset is publicly accessible; reusing a filename can replace existing asset bytes. Imported PNG, JPEG, and WebP images are also copied to the media library when possible. Only for content the user owns or has permission to use; do not copy third-party text, images or other assets without the owner's permission.
import_asset_from_url
Import an image from a public URL into a blog's asset storage. Returns a URL usable in blog post markdown (e.g. ). Supports PNG, JPEG, GIF, WebP, and SVG. Only for content the user owns or has permission to use; do not copy third-party text, images or other assets without the owner's permission.
import_blog_asset
Start (or resume) an A/B test so REAL visitors to the live page are split between its variants. From DRAFT it starts the test; from PAUSED it resumes it, keeping the original start date so results gathered before the pause still count (there is no separate resume tool). Any other status is refused. Preconditions the server enforces: the plan must include A/B testing (SMART also needs smart traffic, AUTO needs auto-optimization); at least one variant must actually differ from the original (a variant left as an unchanged clone, e.g. because AI generation ran out of credits, blocks launch: edit it first); blog-post tests run MANUAL only and need the blog on a custom domain; only one active test per page. Launching does not publish the page itself or charge credits. mode: MANUAL keeps a fixed split; SMART shifts traffic toward the better variant as data comes in and can declare a winner on its own; AUTO does the same and, once its winner is published, starts the next challenger automatically. Omit mode to keep the test's current mode. A test measured on the account ROI goal (roi_event) runs MANUAL even when SMART is asked for. Split (MANUAL only): trafficSplit = % of visitors who see A (the original) on a two-variant test, the rest see B; trafficSplits = one % per variant A..D, summing to 100, for a test with 3-4 variants. Omit both to keep the test's stored split (50/50 by default). Goal: omit primaryGoalType to keep the goal set when the test was created. When resuming, leave it out unless the user asked to change it: changing the goal re-grades every result so far. Returns the new status, the mode and split actually applied, the variants and the public URL where the test now runs.
launch_experiment
List A/B tests (page, section and blog tests), newest first, without results. Pass pageId (or slug) for one page's tests — the same list the editor's Optimize tab shows; a variant page resolves to the test it belongs to. Without a page it lists your tests across every organization you belong to, or only organizationId's. Each row has the test's id, name, status (DRAFT, RUNNING, PAUSED, COMPLETED, ARCHIVED), testScope (page | section | blog), testType (ab | multivariate), mode (MANUAL | SMART | AUTO), goal, traffic split, start/completion dates, winnerVariant, the page it runs on, and its variants. For a page-level test every challenger is its own serving page (slug `<slug>-variant-b` and so on): edit that page with edit_page / edit_page_draft to change the variant. Section and blog variants point at the original page and are edited with update_experiment_variant. A variant with generationIncomplete: true is still identical to A. Variant pages of completed or archived tests are cleaned up, so their slug is null. Use get_experiment for visitors, conversions and confidence.
list_experiments
List the ad platforms and sizes generate_ad can produce — every platform key, its preset sizes (with which ones are in the default 'essentials' set), whether it can carry a video ad, plus the valid coverage and objective values. Call this before generate_ad rather than guessing platform or preset keys.
list_ad_formats
List the ad campaigns in your workspace, newest first — id, title, generation status, the platforms built, tile count, and an editor link. Spans every organization you belong to unless you pass organizationId. Optionally filter by a title substring.
list_ads
List posts in a blog. Returns all posts (drafts and published) by default.
list_blog_posts
List HTML post templates for a blog
list_blog_templates
Use this when the user asks what a scheduled blog writer has produced, whether a run finished, or how many credits it used. Returns recent run status and resulting post references, scoped to the exact blog and writer. A published post flag is not independent verification that the public URL serves its latest content.
list_blog_writer_runs
Use this when the user wants to inspect recurring blog writers, their briefs, schedules, draft/automatic publication mode, credit caps, or paused status. Returns directly managed writers for an accessible blog; routine-managed writers are managed in the dashboard. Read before changing an existing writer.
list_blog_writers
List your blogs with post counts across all organizations
list_blogs
List all brand kits. Returns kit names, IDs, whether each is the default, and whether it is frozen (a frozen kit is over the plan's limit and can't be applied to new pages or ads).
list_brand_kits
Leadpages ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Leadpages's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Leadpages alternatives on ChatGPT?
As of 2026-11-02, Leadpages competes with AgentBuild, Allo Christian, AVSBL Website Builder, B12 Website Generator, Beste, CR Servers AI Connect, Croisa, Dazzly and 30 more in ChatGPT AI Website Builders, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.