Menu
NEW AGENT
MY AGENTS
ASSISTANTS
Local SEO Keywords Generator
- Step 4
Summary - 14th Jan
Summary - 13th Jan
Summary - 12th Jan
Summary - 10th Jan
Summary - 7th Jan
Summary - 7th Jan
Summary - 4th Jan
Summary - 3rd Jan
Summary - 2nd Jan
SETTINGS
LOGOUT
Local SEO Keywords Generator - Confirm & Copy Final Agent Code
1
Describe
Describe your task
2
Refine
Refine the plan
3
SubAgents
Review all agents
4
Deploy
Deploy your agent
Review Final Agent Copy
Expand
[ { "taskID": 223, "semanticTitleOfTask": "LLM - Parse & Normalize Business Profile Inputs", "taskDescription": "Uses a language model to convert raw business details—name, comma-separated services, and comma-separated service areas—into a strictly formatted JSON object. It splits lists, trims whitespace, lowercases text, removes duplicates, and sets website to null when none is supplied.", "inputDescription": "Three text inputs supplied by the user: (1) VARIABLE1 = business_name, (2) VARIABLE2 = comma-delimited services list, (3) VARIABLE3 = comma-delimited service_area list. Website is optional and, if not included, will be set to null automatically.", "inputRequired": ["VARIABLE1", "VARIABLE2", "VARIABLE3"], "outputDescription": "A single block of UTF-8 JSON text containing keys business_name, services[], service_area[], and website, fully normalised and compliant with the required schema, with no extra characters or commentary.", "outputName": "structured_json_text", "promptInstruction": "Take the inputs below and output ONLY valid UTF-8 JSON that matches this schema: {\"business_name\":string, \"services\":[], \"service_area\":[], \"website\":string|null}. • Split comma-separated lists into arrays. • Trim whitespace, lowercase each item, and remove duplicates. • If any website input is blank, set \"website\" to null. Do not add explanations—return the pure JSON object only.\nINPUTS:\nbusiness_name: {{VARIABLE1}}\nservices: {{VARIABLE2}}\nservice_area: {{VARIABLE3}}" }, { "taskID": 185, "semanticTitleOfTask": "Save Business Profile JSON to UTF-8 File", "taskDescription": "Writes the structured JSON text from the previous task to disk as a file named business_profile.json, ensuring UTF-8 encoding and preserving the content exactly as received.", "inputDescription": "Requires the JSON text token produced by the parsing task that contains the cleaned and structured business profile data.", "inputRequired": ["structured_json_text"], "outputDescription": "Creates a file called business_profile.json in the working directory, encoded in UTF-8, containing precisely the JSON text supplied.", "outputName": "business_profile_json", "promptInstruction": "no instruction" }, { "taskID": 223, "semanticTitleOfTask": "Extract and alphabetize services and locations", "taskDescription": "Reads business_profile.json, isolates the arrays of services and service areas, then outputs two distinct plain-text lists—one for services and one for locations—each item on its own line and alphabetically sorted.", "inputDescription": "Requires the JSON file that stores a local business profile with keys: business_name, services (array), service_area (array), and optional website URL.", "inputRequired": ["business_profile_json"], "outputDescription": "Plain-text block containing List-A (sorted services) followed immediately by List-B (sorted service areas), ready for downstream combination work.", "outputName": "sorted_service_location_lists", "promptInstruction": "Load the following JSON describing a local business. Return two separate, alphabetically sorted plain-text lists without bullets: List-A = all \"services\" values; List-B = all \"service_area\" values (cities/areas). Ensure each item is on its own line. JSON: ```{{business_profile_content}}```" }, { "taskID": 223, "semanticTitleOfTask": "Generate unique local-SEO seed phrases", "taskDescription": "Combines each service with each location to create up to 25 unique, lowercase search phrases that reflect local intent, following four predefined linguistic patterns and removing duplicates.", "inputDescription": "Needs the two plain-text lists—services and cities—returned by the previous task; they serve as the basis for phrase generation and deduplication.", "inputRequired": ["sorted_service_location_lists"], "outputDescription": "A plain-text list (maximum 25 lines) of deduplicated, lowercase local search phrases suitable for keyword research.", "outputName": "seed_phrase_list", "promptInstruction": "Using the Services list and Cities list below, generate local-intent search phrases following these patterns until you have no more than 25 UNIQUE items: 1) \"[service] in [city]\" 2) \"best [service] [city]\" 3) \"[service] near me [city]\" 4) \"[city] [service]\". Keep all text lowercase, remove duplicates, and output ONLY the phrases, one per line, no numbering. Services: ```{{service_list_content}}``` Cities: ```{{city_list_content}}```" }, { "taskID": 185, "semanticTitleOfTask": "Write seed phrase list to CSV file", "taskDescription": "Takes the generated seed phrase list, adds a header named \"keyword\", and writes the data to seed_keywords.csv in UTF-8 encoding.", "inputDescription": "Receives the plain-text list of seed phrases produced in the preceding task; each line represents one keyword that must be placed into the CSV.", "inputRequired": ["seed_phrase_list"], "outputDescription": "A UTF-8 encoded CSV file titled seed_keywords.csv with a single column header \"keyword\" followed by up to 25 rows of local search phrases.", "outputName": "seed_keywords_csv", "promptInstruction": "no instruction" }, { "taskID": 2231, "semanticTitleOfTask": "LLM Keyword Expansion from Seed Terms", "taskDescription": "Uses a language model to read the one-column seed_keywords.csv (≤25 rows) and produce a single de-duplicated list (≤100 lines) of locally-focused keyword variants that preserve search intent.", "inputDescription": "Requires the UTF-8 CSV file generated earlier that contains a header row \"keyword\" and up to 25 seed phrases, delivered either as a file path or raw text content.", "inputRequired": ["seed_keywords_csv"], "outputDescription": "Plain-text list containing a maximum of 100 unique, line-separated keywords that merge the original seeds with newly generated local variants.", "outputName": "expanded_keyword_list", "promptInstruction": "Here is a list of seed keywords for a local business. For EACH seed keyword, create up to THREE closely related local search variants by adding location modifiers (city + service), qualifiers (best, top, professional, expert), intent modifiers (near me, services in), synonyms, or plural forms. Maintain local intent, remove duplicates, cap the final list at 100 total items, and return ONLY the list with one keyword per line—no commentary." }, { "taskID": 224, "semanticTitleOfTask": "LLM Retrieval of Search Volume and Difficulty", "taskDescription": "Queries reliable keyword-research sources or heuristics for every keyword from the expanded list, adding estimated local monthly search volume and an organic ranking difficulty score (0-100).", "inputDescription": "Takes the text list of ≤100 keywords produced by the previous task; each keyword is evaluated individually for search metrics relative to its embedded location or, if none, default U.S. city-level data.", "inputRequired": ["expanded_keyword_list"], "outputDescription": "Markdown- or TSV-style table containing three columns—keyword, avg_monthly_searches, difficulty_score—for every keyword in the list, one row per keyword.", "outputName": "raw_keyword_metrics_table", "promptInstruction": "For each keyword provided, supply accurate search metrics: 1) average monthly local search volume (use the geographic element in the keyword if present, otherwise default to US city-level), and 2) a difficulty score from 0-100 where 0-20 = very easy, 21-40 = easy, 41-60 = moderate, 61-80 = difficult, 81-100 = very difficult. Return ONLY a three-column table formatted exactly as: keyword | avg_monthly_searches | difficulty_score—no additional commentary." }, { "taskID": 2232, "semanticTitleOfTask": "LLM Normalisation to Clean CSV Format", "taskDescription": "Converts the raw metrics table into a strictly formatted CSV file; patches missing values with reasonable estimates, escapes special characters, and verifies numeric consistency.", "inputDescription": "Consumes the three-column metrics table from the previous task in markdown, TSV, or similar fixed-width text and prepares it for storage as a clean UTF-8 CSV.", "inputRequired": ["raw_keyword_metrics_table"], "outputDescription": "CSV text that begins with the exact header row \"keyword,avg_monthly_searches,difficulty_score\" followed by up to 100 fully populated data rows.", "outputName": "keyword_metrics_csv_text", "promptInstruction": "Convert the preceding three-column table to valid CSV. 1) Add header: keyword,avg_monthly_searches,difficulty_score. 2) Ensure proper CSV escaping and UTF-8 compatibility. 3) If any metric is blank, infer a plausible value from similar rows. 4) Strip characters that could break CSV formatting, and confirm all numeric values use standard digits. Return ONLY the CSV text—no commentary." }, { "taskID": 185, "semanticTitleOfTask": "Write CSV File to keyword_metrics.csv", "taskDescription": "Saves the cleaned CSV text as a UTF-8 file named keyword_metrics.csv in the designated working directory, making it available for downstream agents.", "inputDescription": "Receives the fully-formatted CSV text generated by the previous task and a writable file system location.", "inputRequired": ["keyword_metrics_csv_text"], "outputDescription": "A file object or path reference pointing to keyword_metrics.csv that contains the final keyword, volume, and difficulty data.", "outputName": "keyword_metrics_csv", "promptInstruction": "no instruction" }, { "taskID": 223, "semanticTitleOfTask": "LLM – Cluster keywords & pick primary terms", "taskDescription": "Uses an LLM to group the supplied keyword-metrics list into ≤30 topical clusters, then chooses the best primary keyword for each cluster based on highest search-volume-to-difficulty ratio, and assigns supporting keywords, location token, and user intent.", "inputDescription": "Takes two UTF-8 text files: keyword_metrics.csv (columns keyword, avg_monthly_searches, difficulty_score) and business_profile.json (business_name, services[], service_area[], website). They are passed as raw text strings to the model.", "inputRequired": ["keyword_metrics_csv", "business_profile_json"], "outputDescription": "Returns clusters_json: a JSON array where each object contains cluster_id, primary_keyword, supporting_keywords[], avg_monthly_searches, difficulty_score, location, and intent.", "outputName": "clusters_json", "promptInstruction": "You are a Local SEO expert. Read the keyword-metrics CSV and business profile. Cluster the keywords into no more than 30 semantically tight groups, prioritising shared service and location terms. For each cluster choose ONE primary_keyword with the best volume vs. difficulty trade-off, list remaining keywords as supporting_keywords (array), inherit the correct avg_monthly_searches and difficulty_score for the chosen primary term, identify the most specific location modifier present, and label user intent as 'informational', 'transactional', 'navigational', or 'near-me'. Output a JSON array of objects with keys: cluster_id, primary_keyword, supporting_keywords, avg_monthly_searches, difficulty_score, location, intent." }, { "taskID": 223, "semanticTitleOfTask": "LLM – Build CSV rows with slugs & SEO metadata", "taskDescription": "Transforms the clusters JSON into the final CSV structure, creating clean page slugs, trimming supporting keyword lists, and ensuring each row contains all required SEO metrics and metadata in the correct column order.", "inputDescription": "Consumes clusters_json produced by the previous task together with the original business_profile.json to reference existing URL paths for possible slug reuse.", "inputRequired": ["clusters_json", "business_profile_json"], "outputDescription": "Produces csv_body_text: a fully formed UTF-8 CSV string including the header line and rows containing page_slug, primary_keyword, supporting_keywords, avg_monthly_searches, difficulty_score, location, intent.", "outputName": "csv_body_text", "promptInstruction": "Using the clusters JSON and business profile, create CSV rows with columns exactly: page_slug, primary_keyword, supporting_keywords, avg_monthly_searches, difficulty_score, location, intent. For each cluster: generate page_slug by slugifying the primary_keyword (lowercase, spaces→hyphens, strip punctuation) unless a matching segment already exists in business_profile.website, in which case reuse that. Limit supporting_keywords to 8 unique items separated by semicolons. Preserve numeric values, keep ordering consistent, and include the header row first. Return ONLY the CSV text." }, { "taskID": 185, "semanticTitleOfTask": "File Writer – Save local keyword plan CSV", "taskDescription": "Writes the CSV text produced by the previous task to disk as a UTF-8 encoded file named local_keyword_plan.csv, ready for import or upload.", "inputDescription": "Accepts the csv_body_text string that already contains the header and all rows for the keyword plan.", "inputRequired": ["csv_body_text"], "outputDescription": "A physical file named local_keyword_plan.csv saved in UTF-8 encoding containing the final keyword plan.", "outputName": "local_keyword_plan_csv", "promptInstruction": "no instruction" } ]
Happy? Now Copy-Paste To Proceed...
BACK TO SUBAGENTS
COPY TO CLIPBOARD