← Plugin catalog
Business & Operations

SearchFit

SearchFIT v1.0.0

Publisher description

From the marketplace listing

SearchFit tracks how a brand appears in AI assistant answers and helps close the gaps. See whether ChatGPT, Perplexity, Gemini, Claude and Google AI mention your brand for the questions buyers actually ask, and how you compare with competitors. From there, generate and publish articles to a connected CMS, research keywords, audit a site for technical problems, and report on Google Search Console and Google Analytics 4 alongside AI visibility. Requires a SearchFit account with at least one brand.

Language: English · Automatically detected from descriptions.

Files & skills

File archives

Plugin package18 files · 12.4 KBBrowse files →
Skill instructions
ai-visibility-report4.04 KB

View saved version →

---
name: ai-visibility-report
description: Report how a brand appears in AI assistant answers (ChatGPT, Perplexity, Gemini, Claude, Google AI). Use for AI visibility, AI search ranking, share of voice in AI answers, tracked prompts, running a visibility scan, competitor comparison in AI results, or sentiment in AI answers. Do not use for classic Google rankings, clicks or impressions, which belong to google-search-console-report.
---

# AI visibility report

Answer the question "when someone asks an AI assistant about this category, does the brand come up, and how does it compare to competitors?"

Every tool here is scoped to one brand and takes `brand_id`.

## Step 1: resolve the brand

Call `list_brands`. It is the only tool that takes no id, so it is always the entry point.

- One brand: use it.
- Several: ask which one, listing name and website. Never guess.
- None: tell the user to create a brand at /dashboard/brands and stop.

Keep `brand_id` for every later call.

## Step 2: establish what is tracked

Call `list_tracked_prompts` with `brand_id`.

A tracked prompt is a question a real buyer would type into an AI assistant, for example "best AI SEO tool for agencies". Visibility is measured against these, so if there are none, there is nothing to report.

If the list is empty:
1. Call `suggest_tracking_prompts` to propose prompts from the brand's site and category.
2. Show the suggestions and ask which to track. Do not track them silently.
3. Call `create_tracked_prompts` with the approved list.
4. Say that results appear only after a scan, then go to step 3.

## Step 3: decide whether to scan

Scans cost credits and take minutes, so do not scan by reflex.

Call `get_visibility_overview` first. If it returns recent results, report those.

Scan only when the user asks for fresh data, or the newest result is stale for their purpose.

Before a large scan, call `get_workspace_details` to check the plan's remaining usage. Telling the user they are out of credits before a scan is useful. Discovering it halfway through is not.

To scan:

1. Call `run_prompt_scan` with the `prompt_ids` to scan.
2. Poll `get_scan_status` with the returned `scan_id`. Do not poll faster than every 20 seconds.
3. When it completes, call `get_scan_results`.

If the user changes their mind, `cancel_prompt_scan` stops it. `list_scans` shows scan history.

## Step 4: assemble the report

Combine these, skipping any that return nothing rather than padding the report:

- `get_visibility_overview` for the headline: how often the brand appears across tracked prompts.
- `get_prompt_analytics` for per prompt detail, including which prompts the brand loses.
- `get_competitor_analysis` for how rivals place on the same prompts. Manage the comparison set with `manage_tracked_competitors`.
- `get_sentiment_analysis` for how the brand is characterised when it does appear.
- `get_visibility_insights` for the specific gaps worth acting on.

## Step 5: report honestly

Lead with the number the user cares about: the share of tracked prompts where the brand appears.

Rules:

- 0% visibility is a real, common and useful finding. Report it plainly. Never soften it and never present an absence of data as if it were zero visibility, or the reverse.
- Never invent a trend. A single scan is a point, not a direction. Only describe movement when two or more scans exist.
- Name the engines the result covers. Visibility differs sharply between assistants, so an aggregate alone can mislead.
- Attribute every number to the prompt it came from, so the user can verify it.

Close with the two or three highest value actions from `get_visibility_insights`. Where an insight has been acted on, `update_visibility_opportunity` records that.

## Boundaries

- Do not create, edit or delete tracked prompts without explicit approval. `update_tracked_prompt` and `delete_tracked_prompt` change what is measured, which breaks comparability with earlier scans.
- Do not start a scan without saying it consumes credits.
- If the user wants content written to close a gap, hand off to the content-production skill rather than doing it here.

Referenced files: 1

content-production3.68 KB

View saved version →

---
name: content-production
description: Write, edit and publish articles for a brand. Use for drafting an article, generating a brief or topic ideas, bulk creating content, adding a featured image, translating an article, exporting, or publishing to a connected CMS such as WordPress, Webflow, Shopify or Squarespace. Do not use for keyword research or for measuring how content performs.
---

# Content production

Take an article from idea to published, using the brand's own voice and connected CMS.

Every tool here is scoped to one brand and takes `brand_id`.

## Step 1: resolve the brand

Call `list_brands`. If more than one, ask which. Keep `brand_id` for every later call.

## Step 2: agree the subject before generating

Generation costs credits and takes minutes, so settle the subject first.

- The user has a topic: use it.
- The user wants ideas: call `generate_topic_suggestions` and let them choose.
- The user wants to close an AI visibility gap: get the gap from the ai-visibility-report skill first, then write against it.

Set the title deliberately. `create_content` accepts both `title` and `prompt`, and they do different jobs:

- `title` is the exact headline to publish under.
- `prompt` is the brief for the writer, for example "cover ROI, include two case studies".

If the user gives an exact headline, pass it as `title`. Do not paraphrase it into the brief, and do not let the brief overwrite it. The title also steers the featured image, so a wrong title produces a wrong image.

## Step 3: generate

Call `create_content` with `brand_id` and the agreed `title` and `prompt`. Optional: `type` (how_to, listicle, comparison) and `model` from `list_ai_models`.

Generation is asynchronous:

1. Note the returned content id.
2. Poll `get_content_job_status` with `content_id`. Do not poll faster than every 20 seconds.
3. When it completes, call `get_content` to read the draft.

For many articles at once use `bulk_create_content`, but confirm the full list with the user first. It multiplies both credits and review effort. Check the plan's remaining usage with `get_workspace_details` before a large batch, so the limit is known before the spend rather than after it.

## Step 4: revise

- `update_content` for edits you can make directly, including the title and body.
- `regenerate_article` to rewrite from a changed brief. This replaces the draft, so confirm before calling it.
- `bulk_update_content` for the same change across several articles, for example a status move.

## Step 5: add the image

1. `generate_image` with a prompt describing the subject. Base it on the article title, not the brief.
2. `set_article_image` to attach it.

## Step 6: publish

1. `list_connectors` to see which CMS destinations the brand has connected. If none, tell the user to connect one in the brand's Connectors settings and stop.
2. `publish_content` with `content_id` and the chosen `integration_id`.
3. `list_publications` to confirm it landed and to get the live URL.

Squarespace is the exception. It exposes no API for creating posts, so use `export_content` to produce an import file that the user uploads themselves. Say this plainly rather than implying an automatic publish.

Other paths: `import_content` brings existing articles in, `manage_translations` produces other language versions.

## Boundaries

- Never publish without explicit confirmation. Publishing is public and hard to undo. Show the title, the destination and the URL, then wait for a yes.
- Never bulk create or regenerate without confirming scope, for the same reason.
- `delete_content` is destructive. Confirm, and list exactly what will be deleted.
- Do not claim an article is live until `list_publications` shows it. A queued publish is not a published one.

Referenced files: 1

google-analytics-report3.12 KB

View saved version →

---
name: google-analytics-report
description: Report Google Analytics 4 data for a brand. Use for sessions, users, engagement, traffic sources and channels, GA4 events, conversions, or audience breakdowns. Do not use for Google search impressions, clicks or ranking position, which belong to google-search-console-report.
---

# Google Analytics 4 report

Report what people did once they arrived: where they came from, how many, and what they did.

Every tool here is scoped to one brand and takes `brand_id`.

## Step 1: resolve the brand

Call `list_brands`. If more than one, ask which. Keep `brand_id` for every later call.

## Step 2: confirm the property

1. `list_connectors` to check Google is connected. If not, say so and stop.
2. `list_ga4_properties` to see the available properties.
3. If several exist, ask which one. Reporting the wrong property is worse than reporting nothing, because the numbers look plausible and are simply about a different site.
4. `set_ga4_property` selects it. This changes what every later report measures, so confirm before calling it.

## Step 3: refresh only if asked

`sync_ga4` pulls fresh data and takes time. Otherwise report what is stored and say when it was last synced.

## Step 4: pull the numbers

- `get_ga4_metrics` for the headline: users, sessions, engagement.
- `get_ga4_traffic_breakdown` for channels and sources.
- `get_ga4_events` for tracked events and conversions.
- `get_audience_breakdown` for who they were.

## Step 5: report

State the property and the date range for every number.

Rules that keep the report honest:

- **Segment before concluding.** A rise in sessions driven by one referral is a different story from a rise in organic search. Give the channel breakdown alongside the total, never the total alone.
- **Sessions are not people.** Report users and sessions distinctly and do not use them interchangeably.
- **Check the window is complete.** GA4 data for the current day is partial. Exclude today, or say it is partial.
- **Compare equal windows,** and prefer like for like periods. Month against month is cleaner than an arbitrary range against another.
- **An event is only a conversion if it is configured as one.** Do not promote an ordinary event into a conversion in the write up.
- Never estimate a missing figure. If it returned nothing, say so.

## Step 6: connect it to the work

The useful question is not how many sessions there were, but whether the work moved them:

- Organic sessions rising while search impressions are flat suggests better CTR rather than better reach. Confirm with the google-search-console-report skill before claiming either.
- A traffic rise concentrated on a small number of pages is worth naming. Say which pages.
- If a channel collapsed, check whether tracking changed before treating it as a real loss. A tag change and a traffic drop look identical in the data.

## Boundaries

- GA4 measures people on the site. It cannot tell you what someone searched to get there, which is Search Console's job.
- For visibility inside AI assistant answers, use the ai-visibility-report skill.
- For a combined client or monthly report, use the performance-report skill.

Referenced files: 1

google-search-console-report3.37 KB

View saved version →

---
name: google-search-console-report
description: Report Google Search Console data for a brand. Use for clicks, impressions, CTR, average position, top search queries, top landing pages, or how published articles perform in Google. Do not use for GA4 sessions or conversions, which belong to google-analytics-report, and do not use for visibility inside AI assistant answers, which belongs to ai-visibility-report.
---

# Google Search Console report

Report what the brand's site did in Google search: who searched, what they saw, and what they clicked.

Every tool here is scoped to one brand and takes `brand_id`.

## Step 1: resolve the brand

Call `list_brands`. If more than one, ask which. Keep `brand_id` for every later call.

## Step 2: confirm Google is connected

Call `list_connectors`.

If Google is not connected for this brand, say so and stop. Tell the user to connect it in the brand's Connectors settings. Do not substitute another source and do not estimate.

## Step 3: refresh only if asked

`sync_search_console` pulls fresh data and takes time. Run it when the user wants current figures. Otherwise report what is stored, and say when it was last synced.

## Step 4: pull the numbers

- `get_search_performance` for clicks, impressions, CTR and average position over a period.
- `get_top_queries` for the searches bringing people in.
- `get_top_pages` for the pages receiving them.
- `get_published_content_urls` to tie performance back to articles produced in SearchFit.
- `get_audience_breakdown` for country and device splits.

## Step 5: report

State the date range and the site every number came from. A figure without its window cannot be checked.

Rules that keep the report honest:

- **Give clicks with impressions.** Impressions alone overstate reach. A page with 10,000 impressions and 12 clicks is a problem, not a success.
- **Search Console lags by roughly two to three days.** Never present the most recent two days as complete, and never read the dip there as a real decline. Say the window excludes them.
- **Average position is weighted across impressions.** It can move because a different mix of queries fired, not because any single ranking changed. When position moves and clicks do not, say that rather than implying the site moved.
- **Compare equal windows.** 30 days against 7 days is not a trend. If comparing, use matching lengths and say so.
- **CTR needs context.** A low CTR at position 3 is a title and description problem. The same CTR at position 30 is normal. Read them together.
- Never fill a gap with an estimate. If a query returned nothing, say it returned nothing.

## Step 6: say what to do about it

Close with a small number of specific actions tied to the data:

- High impressions and low CTR: rewrite the title and meta description for those queries.
- Position 5 to 15 on a valuable query: the page exists and nearly ranks, so improving it usually beats writing a new one.
- Queries with no matching page: a content gap. Hand off to the content-production skill.

## Boundaries

- Search Console measures Google only. If the user asks how the brand appears in ChatGPT, Perplexity or similar, that is the ai-visibility-report skill, and answering it with Search Console data would be wrong.
- For sessions, users, engagement or conversions, use the google-analytics-report skill.
- For a combined client or monthly report across several sources, use the performance-report skill.

Referenced files: 1

keyword-competitor-research2.89 KB

View saved version →

---
name: keyword-competitor-research
description: Research keywords and competitors for a brand. Use for finding keyword ideas, tracking keywords, checking ranking history, comparing against competitors, or reviewing backlinks and referring domains. Do not use for AI assistant visibility, which belongs to ai-visibility-report, and do not use for writing articles.
---

# Keyword and competitor research

Find the terms worth winning, track them, and see who else is winning them.

Every tool here is scoped to one brand and takes `brand_id`.

## Step 1: resolve the brand

Call `list_brands`. If more than one, ask which. Keep `brand_id` for every later call.

## Step 2: see what is already tracked

Call `list_keywords`. Start here so you extend the existing set rather than duplicating it.

If metrics look stale, `refresh_keyword_metrics` updates volume and difficulty.

## Step 3: find new terms

Call `discover_keywords`:

- `seed` generates ideas around a term.
- `location` scopes them to a market.
- `limit` caps the count, maximum 50.

Present ideas with their volume and difficulty, and say which are realistic for the brand rather than listing the highest volume terms. A term the brand cannot rank for is not an opportunity.

Add the approved terms with `add_keywords`. Use `update_keyword` to adjust one, `delete_keyword` to drop one.

## Step 4: track position over time

`get_keyword_ranking_history` shows movement for a tracked keyword.

Only describe a trend when the history holds more than one point. A single measurement is a position, not a direction.

## Step 5: compare against competitors

- `list_competitors` for the current set, `add_competitor` and `remove_competitor` to change it.
- `sync_competitor_metrics` to refresh their numbers before comparing.

Compare like for like: the same keywords, the same location, the same dates. Say which are covered.

## Step 6: authority

`get_backlinks` and `get_referring_domains` show which sites link to the brand, and `sync_backlinks` refreshes them. Referring domains matter more than raw link count, because many links from one domain count for far less than links from many.

## Reporting rules

- Give volume and difficulty together. Volume alone reads as opportunity when it is often just competition.
- Say when data was last synced. Stale numbers presented as current lead to bad decisions.
- Never invent a number for a keyword that returned none. Say it returned none.
- Do not name the third party data sources behind backlink or keyword metrics. Refer to the data, not the vendor.

## Boundaries

- `delete_keyword` and `remove_competitor` change what is measured over time and break comparability with earlier reports. Confirm first.
- If the user wants an article for a keyword, hand off to the content-production skill.
- If the user asks how they appear in AI assistant answers, that is the ai-visibility-report skill, and it is a different measurement entirely.

Referenced files: 1

performance-report4.69 KB

View saved version →

---
name: performance-report
description: Generate a complete performance report for a brand across AI visibility, Google Search Console, Google Analytics and content. Use for a monthly report, a client report, a quarterly review, an executive summary, or "how are we doing overall". Do not use for a single metric lookup, which belongs to the focused skill for that source.
---

# Performance report

Produce the report an agency sends a client, or a marketing lead takes into a review: several sources, one narrative, with the AI surface alongside classic search.

Every tool here is scoped to one brand and takes `brand_id`.

## Step 1: agree the shape before gathering

Ask for, or confirm sensible defaults on:

- **Which brand.** Call `list_brands`. If more than one, ask.
- **The period.** Default to the last full calendar month, not the last 30 days, because a report that spans two part months cannot be compared with the next one.
- **The comparison.** Default to the equivalent previous period.
- **The audience.** A client report leads with outcomes. An internal review can carry the detail behind them.

Gathering everything first and asking afterwards wastes the user's time and credits, so settle this first.

## Step 2: check what is actually available

Call `list_connectors`.

Report on the sources that are connected and name the ones that are not. A report missing GA4 is still useful. A report that quietly omits GA4 without saying so is misleading, and the reader has no way to know.

## Step 3: gather

Work through the sources that are connected. Skip any that return nothing rather than padding.

**AI visibility**, the part most reports do not have:
- `get_visibility_overview` for share of tracked prompts where the brand appears.
- `get_competitor_analysis` for how rivals place on the same prompts.
- `get_visibility_insights` for the gaps worth acting on.
- `list_scans` to confirm more than one scan exists before describing any movement.

**Google search:**
- `get_search_performance` for clicks, impressions, CTR, position.
- `get_top_queries` and `get_top_pages` for what drove it.

**Analytics:**
- `get_ga4_metrics` for users and sessions.
- `get_ga4_traffic_breakdown` for channels.
- `get_ga4_events` for conversions.

**Content shipped in the period:**
- `list_content` and `list_publications` for what went live.
- `get_published_content_urls` to tie articles to their search performance.

**Site health**, when a technical audit is in scope:
- `get_audit_issues` for what is still broken.

## Step 4: write it

Structure:

1. **Headline.** Three or four numbers with their direction: AI visibility, clicks, users, conversions.
2. **What changed and why.** Tie movement to work done. "Published 6 articles, 4 now ranking, driving 340 of the 1,200 new clicks" is a report. "Traffic is up 12%" is a number.
3. **AI visibility.** Where the brand appears in AI answers, which competitors take the prompts it loses, and what would close the gap.
4. **Search performance.** Queries and pages that moved, with position and CTR read together.
5. **Audience and conversions.** What the traffic did.
6. **Next period.** Three or four specific actions drawn from the data, each naming the page, query or prompt it applies to.

## Step 5: rules that keep it trustworthy

A report is read by people who will not check the tools, so the burden of accuracy sits here.

- **Label every window and source.** Each number carries its date range and where it came from.
- **Never describe a trend from one measurement.** With a single AI visibility scan, report the position and say a trend needs a second scan.
- **Exclude the incomplete tail.** Search Console lags two to three days and GA4's current day is partial. Say the window excludes them.
- **Never invent a number, and never fill a gap to make the report look complete.** Say what is missing and why.
- **Report bad results plainly.** 0% AI visibility, a traffic fall, an article that did nothing: state it, then say what to do. A report that only carries good news is worthless, and the reader will discover the truth anyway.
- **Separate correlation from cause.** Traffic rising in the same month as a publishing push is not proof the push caused it. Say what the data supports and what it only suggests.
- **Compare like with like.** Equal length periods, same property, same market.

## Boundaries

- This skill reads and assembles. It does not publish content, start scans or delete anything. If the report shows work is needed, hand off to content-production, ai-visibility-report or technical-site-audit.
- A large scan or crawl mid report costs credits and time. Ask first, and say the report will otherwise use existing data.
- For one metric, use the focused skill instead. This one is for the whole picture.

Referenced files: 1

reddit-social-listening2.68 KB

View saved version →

---
name: reddit-social-listening
description: Find and respond to Reddit conversations relevant to a brand. Use for social listening, monitoring subreddits, finding threads worth replying to, drafting a Reddit comment, or managing listening keywords. Do not use for publishing articles or for AI visibility reporting.
---

# Reddit social listening

Find conversations where the brand is genuinely relevant, and draft a reply worth posting.

Every tool here is scoped to one brand and takes `brand_id`.

## Step 1: resolve the brand

Call `list_brands`. If more than one, ask which. Keep `brand_id` for every later call.

## Step 2: check what is being listened for

- `manage_reddit_keywords` shows and edits the terms being monitored.
- `reddit_settings` shows the current configuration.
- `search_subreddits` finds communities worth monitoring for a topic.

If nothing is configured, agree the keywords and subreddits with the user before scanning.

## Step 3: get opportunities

Call `list_reddit_opportunities` for threads matching the brand's keywords.

`trigger_reddit_scan` looks for new ones. This takes time, so only run it when the stored results are too old for the user's purpose.

`get_reddit_stats` summarises volume over time.

## Step 4: judge relevance before drafting

Most threads are not opportunities. Before drafting anything, check that the thread is one where the brand has something genuine to add.

Reject a thread when:

- The question is already answered well.
- The brand is only tangentially related.
- The subreddit forbids self promotion. Check the rules.
- The thread is old enough that a reply will not be seen.

Say plainly when a batch contains nothing worth replying to. An honest "none of these are worth it" is more valuable than five forced replies, which read as spam and damage the brand.

## Step 5: draft

Call `generate_reddit_comment` for a thread worth answering.

Review the draft before showing it. It must answer the question asked, and it must read like a person rather than marketing copy. If the draft only works as an advert, discard it and say the thread is not a fit.

Use `update_reddit_opportunity` to record that an opportunity has been handled or dismissed.

## Boundaries

- These tools draft comments. They do not post them. Never tell the user something has been posted. Hand them the draft and let them post it themselves.
- Never present a draft as ready without saying it is a draft for their review.
- Disclosure matters. If the comment recommends the brand, the reply should make the affiliation clear. Most subreddits require this, and undisclosed promotion gets accounts banned.
- Do not draft replies at volume across many threads. That is the pattern Reddit treats as spam.

Referenced files: 1

technical-site-audit3.03 KB

View saved version →

---
name: technical-site-audit
description: Crawl a brand's website and report technical SEO problems. Use for running a site audit, checking crawl issues, broken links, page level fixes, sitemap imports, or managing the media library and image alt text. Do not use for keyword research or for writing content.
---

# Technical site audit

Crawl the brand's site, find what is technically wrong, and turn it into a fix list.

Every tool here is scoped to one brand and takes `brand_id`.

## Step 1: resolve the brand

Call `list_brands`. If more than one, ask which. Keep `brand_id` for every later call.

## Step 2: know which pages exist

Call `list_pages`.

If empty, populate it before auditing:

- `import_sitemap_urls` pulls the site's own sitemap. Try this first.
- `scan_urls` takes an explicit list when there is no usable sitemap.

## Step 3: run the audit

1. `start_audit` with `brand_id`. `max_pages` caps the crawl. Set it for large sites and tell the user what the cap excludes, because a capped crawl is a sample and reporting it as complete is wrong.
2. Poll `get_audit`. Do not poll faster than every 30 seconds. Crawls take minutes.
3. `cancel_audit` stops one that is no longer wanted.

## Step 4: read the results

- `get_audit_issues` is the core output: what is broken and where.
- `get_audit_pages` for per page detail.
- `get_audit_links` for internal and external link problems, including broken links.
- `get_audit_assets` for images and files, including ones that are oversized or missing alt text.

## Step 5: turn issues into a fix list

Group by cause, not by URL. Two hundred pages missing a meta description is one template problem, not two hundred problems, and reporting it as two hundred buries the real work.

Order by impact:

1. Issues blocking indexing, for example pages that cannot be crawled or are excluded.
2. Issues that break the experience, for example broken links.
3. Issues that weaken a page, for example missing metadata or alt text.

`get_page_suggestions` gives page level recommendations, and `update_page_suggestion` records that one has been handled. `check_page_frameable` tests whether a page can be previewed in an embed. `page_refresh_jobs` shows content refresh work already queued.

## Step 6: media

The media library is part of the same surface:

- `list_media_assets` to see what exists, `update_media_asset` and `delete_media_asset` to change it.
- `generate_alt_text` to fix missing alt text found by the audit.
- `import_assets_from_audit` to pull crawled images into the library.
- `manage_media_folders` to organise them.

## Boundaries

- `delete_pages` removes up to 5000 URLs in one call and cannot be undone. Always list what will be deleted and get explicit confirmation. Never infer this from a vague instruction to clean up.
- `delete_media_asset` is destructive in the same way. Confirm first.
- Never present a capped or partial crawl as a full one. State the page count crawled and the cap applied.
- Do not report an issue count without saying how many pages were crawled. The number is meaningless without the denominator.

Referenced files: 1

Package details

Publisher declarations from the archived package. These are separate from our research and the live service's terms.

Package author
SearchFIT

Package observed Oct 2, 2026.

Technical details
First seen
Sep 30, 2026 · 22:02 UTC
Last seen
Oct 2, 2026 · 00:00 UTC
Collection status
Collected

plugin_asdk_app_6a77e3320e108191b0955377b387accf

Download plugin data (JSON)