add_competitor
ChatGPTManually add a competitor to track for a site. Capped by the account's competitors_tracked plan limit (pooled across all sites) — fails with a clear quota error if at the cap.
add_rank_tracking_keywords
ChatGPTAdd keywords to a rank tracker (idempotent — re-adding an already-tracked keyword is a no-op). Capped by the account's rank_tracking_keywords plan limit, pooled across every tracker on every site — check estimate_rank_tracker_cost or just try it; a quota error names the current cap.
add_watched_url
ChatGPTStart watching a URL for citation performance.
approve_and_publish_content_plan_item
ChatGPTApprove a calendar item's ready draft AND PUBLISH it to the connected CMS, honoring CMS and quota gates. This is a real, external, hard-to-reverse publish action — confirm with the user before calling this rather than doing it unprompted, same as publish_blog_draft.
create_ai_provider_setup_link
ChatGPTGet a one-time Leadstore link to save the account's own API key for an assistant provider. The user pastes the key on that page — this tool never sees it. Only works where manageable is true in list_ai_model_providers; on plans that include AI model access, the covered providers are supplied by Leadstore and the page will show a 'provider_key_managed' refusal instead of a form.
create_framer_setup_link
ChatGPTGet a one-time Leadstore link to connect a site to Framer. The user pastes their project-scoped API key and project URL/ID on that page — this tool never sees the key.
create_integration_setup_link
ChatGPTGet a one-time Leadstore link to connect a catalog integration (e.g. Ahrefs/Semrush BYO-key, Slack webhook). The user pastes the actual key/URL on that page — tell them to open it themselves; this tool never sees or asks for the credential. Not for GA4/Search Console/Webflow — those need a real browser OAuth flow the user completes in the app directly.
create_keyword_group
ChatGPTCreate a keyword group (tag) for a site. Returns the existing group if the name already exists.
create_rank_tracker
ChatGPTCreate a new rank tracker for a site (a domain + device + location + language + check-cadence configuration). Free — cost only happens when keywords are added and a check actually runs.
create_sanity_setup_link
ChatGPTGet a one-time Leadstore link to connect a site to Sanity CMS. The user pastes their personal token and picks a project on that page — this tool never sees the token.
create_wordpress_setup_token
ChatGPTMint a short-lived, single-use credential for connecting the Leadstore WordPress plugin (named create_, not get_ — this issues a new secret each call, it doesn't read one back). This only gets the user as far as having a token to paste — the plugin itself (installed and active on their real WordPress site) has to complete the registration call; there's no way to finish this from here. Rate-limited.
delete_ai_model_provider_key
ChatGPTRemove the account's own saved API key for an assistant provider. Like saving, this is refused with 'provider_key_managed' for providers Leadstore supplies on the account's plan — there is no user-owned key to remove in that case.
delete_competitor
ChatGPTStop tracking a competitor.
delete_keyword
ChatGPTDelete a keyword. Fails if a blog draft already covers it.
delete_keyword_group
ChatGPTDelete a keyword group (does not delete the keywords in it).
delete_keyword_run
ChatGPTDelete a past keyword-research run and its keywords.
delete_onpage_fix
ChatGPTRemove an on-page fix.
delete_rank_tracker
ChatGPTDelete a rank tracker and all of its tracked keywords and position history.
delete_saved_competitor_keyword
ChatGPTRemove a bookmarked competitor keyword.
disconnect_framer
ChatGPTDisconnect a site's Framer connection.
disconnect_integration
ChatGPTDisconnect a catalog integration.
disconnect_sanity
ChatGPTDisconnect a site's Sanity connection.
dismiss_content_gap
ChatGPTDismiss a content-gap topic so it stops showing up as open.
estimate_rank_tracker_cost
ChatGPTGet the real number of SERP API calls a run_rank_tracker call would make right now (one per tracked keyword) — check this before running a tracker with a lot of keywords.
get_account_quota
ChatGPTGet how much of each metered feature is left this period (content_drafts, keyword_runs, visibility_runs, offsite_opportunities, engagement_drafts, page_optimizer_analyses, etc.), plus shape limits like audit_cooldown_seconds and max_keywords_per_run. Check this before suggesting any action that spends quota. Plan name, subscription status and billing details are deliberately NOT available here — if the user asks about their plan, pricing or subscription, tell them to open the Leadstore app rather than guessing.
get_attribution
ChatGPTGet attribution analytics for a site — which AI-driven touchpoints correlate with real traffic/conversions.
get_audit_checks
ChatGPTGet every check from a site's latest technical audit (SEO/AEO/GEO/LLMO/ASO), grouped by channel. Each failing check includes detail (what's wrong) and, for most failures, ai_prompt — a complete, ready-to-use prompt describing exactly how to fix it (file-level guidance, not just a description) that you can hand directly to a coding assistant, or use yourself to make the fix. Also includes fix_impact, the real point-gain from fixing each one.
get_audit_crawl_issues
ChatGPTList issues found by the latest audit's multi-page crawl (broken links, duplicate titles/meta descriptions, thin content, missing alt text, etc.) — a different, page-level layer from get_audit_checks. Optionally filter by severity (high|medium|low) or issue_type.
get_audit_pages
ChatGPTList every page from the latest audit's multi-page crawl, with per-page technical fields (status code, title, meta description, word count, image/link counts, indexability). Returns 404 if no audit has a crawl yet.
get_audit_status
ChatGPTCheck what's available before considering a new audit: the quota counters (including shape_limits.audit_cooldown_seconds and the visibility_runs counter) plus the audit score history (most recent entry's date tells you how long ago the last technical audit ran). Use this to tell the user whether they're likely still in cooldown or out of quota — running a new audit is something they do themselves in the Leadstore app; there's no trigger tool here.
get_audit_tasks
ChatGPTGet the audit task tracker for a site: which failing checks are new, still open, resolved, or reopened since the previous audit. Read-only and derived — a task resolves itself once the underlying issue is fixed and a new audit is run; there's no separate mark-done action.
get_blog_draft
ChatGPTGet one blog draft's full content and metadata (list_blog_drafts may truncate the body). Two fields matter for improving a draft. generation_plan is what the draft committed to before it was written: the sections, which of the site's own data items (internal links, competitor keyword gaps, verified source URLs, real searched questions) were assigned to which section, the planned FAQ, and a stated reason for every item deliberately left out. quality_report is how it was measured against that: scores (structure_seo / grounding / trust), grounding (which committed items are actually missing from the body), and findings — fact-review problems, each carrying the verbatim quote from the draft it came from and the block it sits in. Fix the quoted passages and the missing committed items; that is what the score measures. generation_plan.claim_evidence holds the passage each cited page actually contained for a planned claim — check a figure in the draft against the wording it came from before treating it as sourced.
get_brand_monitoring
ChatGPTGet what AI engines are currently saying about the brand — the core "is this accurate/flattering" check, separate from the raw visibility score.
get_brand_monitoring_history
ChatGPTGet brand-monitoring results over time, not just the latest snapshot.
get_citation_growth
ChatGPTGet the trend of how often a site is being cited by AI engines over time.
get_citation_relationships
ChatGPTGet which sources AI engines cite alongside this site when discussing it — the surrounding citation graph.
get_citation_sources
ChatGPTGet the sources AI engines draw from when they cite or discuss this brand.
get_competitor_alerts
ChatGPTGet recent competitor-visibility changes worth flagging — a competitor's mention share moving meaningfully since the previous audit run.
get_competitor_backlinks
ChatGPTGet a tracked competitor's latest backlink profile snapshot. Returns 404 if none has been fetched yet — call refresh_competitor_backlinks first.
get_competitor_domain_overview
ChatGPTGet a tracked competitor's latest domain overview snapshot (organic traffic estimate, ranked-keyword count, domain rank) — real measured data, not just the name competitor discovery gives you. Returns 404 if none has been fetched yet — call refresh_competitor_domain_overview first.
get_content_calendar
ChatGPTGet the scheduled content plan items for a site, optionally within a date range.
get_content_plan
ChatGPTGet a site's content-plan settings (mode, cadence, per-run limit, lookahead window, autopublish).
get_framer_status
ChatGPTGet a site's Framer connection status.
get_ga4_channel_grouping
ChatGPTReal session/user counts by acquisition channel (Organic Search, Paid Search, Direct, Referral, Social, Email, ...) from the connected GA4 property.
get_ga4_key_events
ChatGPTReal per-page key-event (conversion) counts from the connected GA4 property — previously this product's GA4 integration had no conversion/goal data at all, only pageviews/sessions/users.
get_generated_llm_data
ChatGPTGet a site's auto-generated llm-data.json file content.
get_generated_llms_txt
ChatGPTGet a site's auto-generated llms.txt file content.
get_hallucinations
ChatGPTGet instances where an AI engine said something false or fabricated about the brand — the thing most worth flagging as "needs work."
get_hallucinations_history
ChatGPTGet hallucination findings over time, not just the latest snapshot.
get_keyword_cluster_mates
ChatGPTPreview the other keywords clustered with a given keyword.
get_keyword_run_keywords
ChatGPTList the keywords produced by one specific historical keyword-research run.
get_keyword_status
ChatGPTCheck remaining keyword-research quota (quota counters only) alongside the existing keyword inventory (first 100, sorted) so you can see how many are already unused (coverage="Gap") before suggesting the user run new research — there's often existing inventory to use first.
get_knowledge_base
ChatGPTGet a site's Knowledge Base: reference blog links, style/tone notes, brand assets, and discovered social/business-profile handles (auto-found or manually added).
get_local_business_profile
ChatGPTGet the site's latest cached Google Business Profile snapshot (rating, review count, category, address, phone, hours). Returns 404 if never fetched — call refresh_local_business_profile first.
get_mentions
ChatGPTGet brand mention trend and recent citations across AI engines for a site.
get_offsite_audit_log
ChatGPTGet the append-only activity log of off-site actions taken for a site (draft created/edited, etc.).
get_offsite_sources
ChatGPTGet the per-site off-site discovery adapter configuration (which sources are enabled, query seeds, cadence).
get_offsite_status
ChatGPTCheck remaining off-site quota (offsite_opportunities, engagement_drafts, quota counters only) alongside how many opportunities already exist by status. Use this before suggesting the user run new discovery or generate new drafts — there's usually unactioned inventory already sitting there.
get_optimization_recommendations
ChatGPTGet a site's current optimization recommendations, derived from its latest audit's failing checks.
get_page_optimization_history
ChatGPTGet past AI-generated page-optimization analyses for a site (qualitative fix suggestions for specific URLs) — read history only; generating a new analysis costs a page_optimizer_analyses credit and isn't exposed here, ask the user to run it from the app.
get_planning_status
ChatGPTCheck remaining content-draft quota (quota counters only) alongside open gap count and current plan settings — use this before suggesting the user run content/plan or generate new drafts.
get_question_ideas
ChatGPTGet question-pattern ideas derived from a site's own keywords and drafts — a different, cheaper source of candidate visibility-audit questions than the paid AI-generation endpoint (not exposed here).
get_question_set
ChatGPTGet the set of questions used to test AI visibility for a site — which ones are selected for the next audit run, and which candidates exist but aren't selected.
get_rank_tracker
ChatGPTGet one rank tracker's full detail, including every tracked keyword's latest position.
get_research_log
ChatGPTCheck what paid research has already been done for a site (last 90 days) before spending on a new lookup — e.g. before calling research_keywords or run_rank_tracker again for the same subject, check here first. Optionally filter by kind and/or a subject substring.
get_sanity_status
ChatGPTGet a site's Sanity connection status.
get_search_console_performance
ChatGPTReal clicks/impressions/CTR/average position from the connected Search Console property, on demand (not the cached daily snapshot the app's Position tracking panel uses). Only covers queries that already got at least one impression — for a target keyword with zero history, use a rank tracker instead. Defaults to a per-query breakdown; pass dimension to break down by device or country instead.
get_search_opportunities
ChatGPTPages in Search Console 'striking distance' (average position 4-20 — close enough to page 1 that a push can realistically move them), sorted by impressions, with GA4 sessions for the same page merged in as the real outcome signal (null if GA4 isn't connected — still useful GSC-only). A high-impression, near-page-1 page with disproportionately few GA4 sessions is worth a closer look.
get_share_of_voice
ChatGPTGet share-of-voice trend and competitor leaderboard for a site.
get_site
ChatGPTGet full detail for one site: traffic summary, tracking-tag install status, and a preview of the auto-generated llms.txt / llm-data.json files.
get_site_backlinks
ChatGPTGet the site's own domain's latest backlink profile snapshot (referring domains, domain rating, a sample of top backlinks). Returns 404 if none has been fetched yet — call refresh_site_backlinks first.
get_traffic_summary
ChatGPTGet a site's traffic summary (verified-bot/crawler + human traffic) over the last N days.
get_traffic_timeseries
ChatGPTGet a site's traffic as a time series (for trend/anomaly analysis) — merges GA4 human traffic with the Leadstore tag's bot/crawler data when GA4 is connected.
get_visibility_citations
ChatGPTGet the raw list of citations found during visibility audits — specific sources AI engines pointed to.
get_visibility_score
ChatGPTGet the current AI visibility score and per-engine breakdown for a site.
get_wordpress_status
ChatGPTGet a site's WordPress plugin connection status.
import_backlink_prospects
ChatGPTTurn tracked competitors' already-fetched backlink samples into link-prospecting opportunities (a domain that already links to a competitor is a targeted outreach target). Free — reads only backlink data already fetched via refresh_competitor_backlinks, no new paid lookup — so this isn't gated by the off-site opportunities quota the way discovering new opportunities normally is.
inspect_url
ChatGPTReal-time Google index status for one URL via Search Console's URL Inspection API — indexing verdict, canonical Google chose, last crawl time, mobile usability. Works for any URL on the property, indexed or not, unlike search-performance data (which only covers queries that already got impressions). Has a low daily quota (Google's own limit) — don't loop this over many URLs.
list_ai_model_providers
ChatGPTList assistant providers (ChatGPT, Gemini, Claude, Perplexity, …) and how each one is powered for this account. Each provider reports: key_source ('included' = Leadstore supplies the key on this plan, 'byo' = the account's own key, null = not set up), managed (true when we supply it), manageable (false when there is no key for the user to set), and key_masked (last 4 characters only, for BYO). On managed-key plans, managed_keys.credits_available reports whether the account's included AI budget for the period still has room — the dollar figures behind it are billing detail and are not exposed here; see the Leadstore app's Usage tab for those. Stored API keys cannot be read back in full by any tool; only the mask is ever available.
list_all_competitor_suggestions
ChatGPTList every discovered competitor suggestion from every past discovery run (full history, paginated), including ones already added.
list_audits
ChatGPTGet a site's audit score history (each past technical audit run and its overall score).
list_blog_drafts
ChatGPTList blog drafts for a site, most recent first. content_score (0-100), quality_buckets (per-check pass/fail with fix guidance) and quality_report (the component scores — structure_seo / grounding / trust — plus any fact-review findings) are included on every draft, computed server-side, no separate scoring call needed. generation_plan_summary says whether the draft was written to a plan; call get_blog_draft for the plan itself.
list_competitor_local_rank_checks
ChatGPTList past local-pack rank checks for a tracked competitor, most recent first — same mechanism as list_local_rank_checks, for a competitor's business name instead of the site's own.
list_competitor_suggestions
ChatGPTList AI-discovered competitor suggestions not yet added (from the latest, or a specific, discovery run).
list_competitors
ChatGPTList the tracked competitors for a site.
list_content_gaps
ChatGPTList open content-gap topics for a site (sourced from visibility, competitor, keyword-cluster, or audit signals).
list_content_measurements
ChatGPTReal measured outcomes for a site's published content: per draft, the page's traffic before publishing, after the follow-up window, and the delta. Rows still inside their follow-up window carry live_metrics (traffic so far) instead of metrics_after, so a recent post reads as in-progress rather than as a failure. traffic_status says whether the site has an analytics source connected at all — with none, every row is empty and that is a setup gap, not a content result. Pair this with get_blog_draft to connect what a draft was built from to how it did: generation_plan says which of the site's own data it committed to using, quality_report.grounding says how much of that it actually delivered, and this says what happened after publishing. Be careful about causation — traffic moves for many reasons, sample sizes here are small, and a high content_score is not a promise of traffic. Report what the numbers show and say when there is too little data to tell.
list_engagement_drafts
ChatGPTList existing engagement drafts (replies/emails/corrections/pitches) written for a site's queued off-site opportunities. These are always draft-only — nothing here is ever auto-sent or auto-posted; a human takes the actual reply/post/edit action manually, outside this system. Each draft carries quality_score, quality_report (per-check pass/fail with fix text, plus any review findings quoting the draft) and blocked. blocked means do not post this as-is — a required affiliation disclosure is missing, a cited source is dead or absent, it duplicates another draft, or a Talk-page request links the brand's own site. Tell the user what to fix; never present a blocked draft as ready.
list_integrations_catalog
ChatGPTList available/connected integrations (CMS, analytics, revenue, SEO data connectors). Pass site_id to resolve per-site connection status accurately.
list_kb_suggestions
ChatGPTList platform-handle suggestions found via search but not yet confirmed — accept to add them to the Knowledge Base, or dismiss.
list_keyword_groups
ChatGPTList a site's keyword groups (tags).
list_keyword_runs
ChatGPTList past keyword-research runs for a site (status, when, how many keywords each produced).
list_keywords
ChatGPTList a site's keywords/ideas (across all research runs), with per-keyword coverage (Covered/Partial/Gap) and draft linkage — this is the full browsable inventory, not just the latest run.
list_local_rank_checks
ChatGPTList past local-pack (Google Maps) rank checks for a site, most recent first.
list_my_reports
ChatGPTList reports this account has submitted through this connector, with their status.
list_offsite_influencers
ChatGPTList influencers/authors discovered off-site, rolled up by reach and sentiment.
list_offsite_mentions
ChatGPTList existing brand mentions found off-site — what people are already saying, with sentiment/intent.
list_offsite_opportunities
ChatGPTList off-site AI-citation opportunities discovered for a site: public web-search results (Reddit, Quora, forums, reviews, social platforms, etc.) plus Wikipedia via its own API — never scraped or authenticated access to the platforms themselves, just what a search engine already surfaces publicly. Optionally filtered by source, status (new/triaged/queued/dismissed), or minimum score. Each opportunity carries TWO independent scores and they answer different questions: total_score is how valuable the thread looks, engagement_safety (0-1) is whether engaging there is appropriate at all given the platform's rules and how relevant the brand genuinely is to that specific thread. A high total_score with low engagement_safety is normal and does NOT mean 'go post' — Wikipedia scores highest on value and lowest on safety, because direct promotional editing is against policy there. recommended_action says what engaging actually means on that source (talk_page_request, reply_with_disclosure, outreach_email, verified_business_reply). Never recommend posting without reading both.
list_onpage_fixes
ChatGPTList the on-page fixes (JSON-LD, meta tags, canonical, hreflang) currently configured for a site — these are injected live by the tracking tag, no CMS access needed.
list_rank_trackers
ChatGPTList a site's rank trackers, each with its tracked keywords and their latest known SERP position (null position means the domain wasn't found in the last scan, not that it ranks last).
list_saved_competitor_keywords
ChatGPTList keywords a user has manually bookmarked against a competitor (found elsewhere, saved for reference — not a live lookup).
list_sites
ChatGPTList the AEO/Leadstore sites on this account, with their site_id.
list_watched_urls
ChatGPTList URLs being watched for citation performance, each with how often it's actually been cited across recent runs.
log_research
ChatGPTRecord a research finding this product has no dedicated endpoint for yet (e.g. you read a competitor's page directly, or ran a lookup outside these tools) so a future check of get_research_log knows it's already been done. Free — this only stores what you give it.
publish_blog_draft
ChatGPTPublish a draft to the site's connected CMS (Sanity/WordPress/Webflow/Shopify/Framer — fails with a clear message if none is connected yet). This is a real, external, hard-to-reverse action — it's not gated on content_score, so confirm with the user before calling this rather than doing it unprompted. If the draft's quality_report.blocked is true, the fact review found something that shouldn't be published as-is (a fabricated statistic or example, or a false claim about the business) — say so and get an explicit go-ahead rather than publishing on the score alone.
refresh_competitor_backlinks
ChatGPTFetch a fresh backlink profile for a tracked competitor's domain. Same cost/rate-limit caveat as refresh_site_backlinks.
refresh_competitor_domain_overview
ChatGPTFetch a fresh domain overview for a tracked competitor. Rate-limited.
refresh_local_business_profile
ChatGPTFetch a fresh Google Business Profile snapshot. Rate-limited — only call when the user wants updated numbers.
refresh_site_backlinks
ChatGPTFetch a fresh backlink profile for the site's own domain. This spends real API quota (the site's own connected Ahrefs/Semrush account if present, otherwise the platform's) and is rate-limited — only call this when the user actually wants updated numbers, not on every question about backlinks.
remove_rank_tracking_keyword
ChatGPTStop tracking one keyword on a tracker. Its past position history is kept, not deleted, even though it stops updating.
remove_watched_url
ChatGPTStop watching a URL.
respond_to_kb_suggestion
ChatGPTAccept (adds it to the Knowledge Base as a confirmed handle) or dismiss a discovered-handle suggestion.
run_competitor_local_rank_check
ChatGPTCheck where a tracked competitor appears in the Google Maps local-pack results for one keyword (+ optional city/region) — see how their local visibility compares to yours for the same search.
run_local_rank_check
ChatGPTCheck where the site's business appears in the Google Maps local-pack results for one keyword (+ optional city/region). Spends real API quota and is rate-limited — this is a one-off check, not a recurring tracker.
run_rank_tracker
ChatGPTRun a rank tracker now instead of waiting for its scheduled check — spends real API quota (one live SERP call per tracked keyword) and is rate-limited. Every tracker also runs automatically on its own schedule_interval, so this is only for 'check right now' requests.
save_competitor_keyword
ChatGPTBookmark a keyword against a competitor for reference. Free — this just stores what you give it, it doesn't look anything up.
schedule_content_plan_item
ChatGPTSchedule a gap or keyword onto the content calendar as a future-dated slot. This does NOT generate a draft yet — it just creates the planned placeholder; a draft gets created later (manually via the app, or by autopilot's reconcile loop for assisted/auto plans).
set_onpage_fix
ChatGPTCreate or replace an on-page fix for a specific URL path on a site. kind is one of jsonld, meta, canonical, hreflang; payload is the kind-specific config object (e.g. the JSON-LD document for kind=jsonld). Upserts — re-applying for the same url_path+kind replaces it.
submit_report
ChatGPTReport a vulnerability, bug, or feature request found while using this connector, or send any other note to Leadstore support. Saved and emailed to support immediately — use this rather than telling the user to email someone, since you can't send email yourself. Rate-limited to 5 per day.
unpublish_blog_draft
ChatGPTRevert a published draft back to draft status and remove it from the connected CMS.
update_blog_draft
ChatGPTEdit an existing draft (only while its status is "draft" or "published"). body is block-level content — text blocks take plain text, images take {url, alt}, tables take {headers, rows}; heading levels can only swap between H2 and H3. Editing the body re-scores the draft server-side and returns the updated content_score / quality_report, so you can check whether a rewrite actually helped instead of guessing. A fact-review finding clears when the passage it quoted is no longer in the body. Editing is free; regenerating is not and isn't exposed here.
update_content_plan
ChatGPTUpdate a site's content-plan settings (mode, cadence, per-run limit, lookahead window, pause/resume). mode "assisted"/"auto" requires the autopilot_scheduling feature (Pro+). Enabling autopublish isn't exposed here on purpose — turning it on together with "trusted" immediately publishes any items already awaiting approval, which is a real publish action, not a settings tweak; that combination has to be set from the Leadstore app.
update_content_plan_item
ChatGPTReschedule a calendar item to a different date, or skip it. Safe — this never publishes anything. To approve a ready draft, use approve_and_publish_content_plan_item instead; it isn't offered here as a status value on purpose, since that action publishes content, not just changes a status.
update_engagement_draft
ChatGPTEdit an existing engagement draft's body/subject/citations. Editing an existing draft is free — generating a brand-new one costs an engagement_drafts credit and isn't exposed here. Editing the body re-runs the safety checks and returns the updated quality_score / blocked, so an edit that adds the missing disclosure or replaces a dead citation clears the block immediately.
update_keyword_group
ChatGPTRename/restyle a keyword group.
update_keyword_groups
ChatGPTReplace which keyword group(s) a keyword belongs to (a keyword can belong to several).
update_knowledge_base
ChatGPTUpdate a site's Knowledge Base. Every field is a full replace of that section — e.g. passing discovered_handles replaces the entire map, so include unchanged entries alongside your edits, or drop a key to reject/remove that handle (including auto-discovered ones).
update_offsite_opportunity_status
ChatGPTTriage, queue, or dismiss an off-site opportunity. queue marks it ready for someone to act on; triage marks it reviewed; dismiss marks it not worth pursuing. This never posts anything anywhere — it only changes the opportunity's internal status.
update_offsite_sources
ChatGPTUpdate the off-site discovery adapter configuration for a site.
update_onpage_fix
ChatGPTEnable/disable an existing on-page fix (or edit its payload).
update_question_set
ChatGPTEdit the visibility-audit question set: select/deselect existing questions by the numeric id shown in get_question_set (these are plan-config ids, not account resource ids, so they stay plain numbers), add new question text directly, or remove questions outright. Selected count is capped by plan. This only edits the set — it doesn't generate new AI-written candidate questions (that's a separate, billed action not exposed here).