Skip to main content
Glama

rowfeed/keyword-generator

rowfeed--keyword-generator
Destructive

This tool calls the Actor "rowfeed/keyword-generator" and retrieves its output results. Actor description: Generate hundreds of long-tail keywords per keyword from what Google, YouTube and Bing suggest in the search box, expanded a-z, 0-9 and with question words. Any country and language. A keyword tool, Google autocomplete API and AnswerThePublic alternative.

Input Schema

NameRequiredDescriptionDefault
expandNonone: only the keyword itself (about 10 suggestions). alphabet: also keyword + a-z and 0-9 (about 300 long-tail suggestions). questions: also how/what/why... + keyword and keyword + for/with/vs... all: alphabet and questions. Example values: "alphabet"alphabet
countryNoTwo-letter country code, e.g. us, gb, de, fr, in. Example values: "us"us
sourcesNoWhose autocomplete to read: Google, YouTube and/or Bing. Example values: ["google"]
keywordsNoKeywords to get suggestions for, one per line. Up to 1,000 per run. Example values: ["running shoes"]
languageNoTwo-letter language code, e.g. en, de, fr, es. Example values: "en"en
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
maxSuggestionsPerKeywordNoStop after this many unique suggestions per keyword and search box. 0 = all.

Output Schema

NameRequiredDescriptionDefault
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "checked_at": {
      +      "type": "string"
      +    },
      +    "country": {
      +      "type": "string"
      +    },
      +    "expansion": {
      +      "type": "string"
      +    },
      +    "keyword": {
      +      "type": "string"
      +    },
      +    "language": {
      +      "type": "string"
      +    },
      +    "position": {
      +      "type": "number"
      +    },
      +    "query": {
      +      "type": "string"
      +    },
      +    "source": {
      +      "type": "string"
      +    },
      +    "suggestion": {
      +      "type": "string"
      +    },
      +    "word_count": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed3 schema fields changed
    • addedInput schema / properties / country / prefill
      Added value: +"us"
    • addedInput schema / properties / keywords / prefill
      Added value: +[
      +  "running shoes"
      +]
    • addedInput schema / properties / language / prefill
      Added value: +"en"
  3. Changed1 schema field changed
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Removed value: -{
      -  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      -  "properties": {
      -    "checked_at": {
      -      "type": "string"
      -    },
      -    "country": {
      -      "type": "string"
      -    },
      -    "expansion": {
      -      "type": "string"
      -    },
      -    "keyword": {
      -      "type": "string"
      -    },
      -    "language": {
      -      "type": "string"
      -    },
      -    "position": {
      -      "type": "number"
      -    },
      -    "query": {
      -      "type": "string"
      -    },
      -    "source": {
      -      "type": "string"
      -    },
      -    "suggestion": {
      -      "type": "string"
      -    },
      -    "word_count": {
      -      "type": "number"
      -    }
      -  },
      -  "type": "object"
      -}
  4. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "checked_at": {
      +      "type": "string"
      +    },
      +    "country": {
      +      "type": "string"
      +    },
      +    "expansion": {
      +      "type": "string"
      +    },
      +    "keyword": {
      +      "type": "string"
      +    },
      +    "language": {
      +      "type": "string"
      +    },
      +    "position": {
      +      "type": "number"
      +    },
      +    "query": {
      +      "type": "string"
      +    },
      +    "source": {
      +      "type": "string"
      +    },
      +    "suggestion": {
      +      "type": "string"
      +    },
      +    "word_count": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  5. Changed1 schema field changed
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Removed value: -{
      -  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      -  "properties": {
      -    "checked_at": {
      -      "type": "string"
      -    },
      -    "country": {
      -      "type": "string"
      -    },
      -    "expansion": {
      -      "type": "string"
      -    },
      -    "keyword": {
      -      "type": "string"
      -    },
      -    "language": {
      -      "type": "string"
      -    },
      -    "position": {
      -      "type": "number"
      -    },
      -    "query": {
      -      "type": "string"
      -    },
      -    "source": {
      -      "type": "string"
      -    },
      -    "suggestion": {
      -      "type": "string"
      -    },
      -    "word_count": {
      -      "type": "number"
      -    }
      -  },
      -  "type": "object"
      -}
  6. Added

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare openWorldHint=true, readOnlyHint=false and destructiveHint=true, which is unusual for what is essentially a read-only keyword scrape. The description adds nothing beyond the Actor's marketing blurb: no note on run duration, cost/credit usage, rate limits, or why a non-destructive scrape is marked destructive. It repeats 'calls the Actor and retrieves its output results' without explaining the async wait/poll behavior described only in the waitSecs schema field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the wrapper boilerplate ('This tool calls the Actor ... and retrieves its output results'), which carries no information for the caller. The second sentence is a pasted Actor blurb with promotional phrasing ('Generate hundreds of...', 'AnswerThePublic alternative'). Short, but a meaningful share of the text doesn't earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The presence of an output schema and 100% schema coverage means return shape and parameters needn't be re-explained. What is missing is sibling differentiation in a crowded keyword-tool family and any behavior around run duration or cost. Adequate but with clear gaps for a tool an agent must choose among 30+ alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including detailed enum semantics for expand and the waitSecs polling behavior, so the schema carries the parameter burden. The description itself says nothing about any of the 7 parameters. Baseline 3 applies when the schema is this rich.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb and resource via the embedded Actor summary: generate long-tail keywords from Google/YouTube/Bing autocomplete, expanded a-z/0-9 and question words, per country/language. That is specific enough for an agent to know what comes back. It never distinguishes this from sibling keyword tools like rowfeed--keyword-search-volume or rowfeed--competitor-keywords, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance, and no mention of the keyword-related siblings. The phrase 'AnswerThePublic alternative' hints at the use case but doesn't route an agent between this and competitor-keywords or keyword-search-volume. The agent must infer selection from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.