{"schema_version":"1.0","updated_at":"2026-10-01","canonical":"https://timetopost.co/use-cases/","mcp_endpoint":"https://api.timetopost.co/mcp","availability_note":"Available workflows may depend on account plan, connected integrations and current capabilities. Guide-only workflows provide instructions without claiming an automated product action. Planned workflows are not available yet. Check capabilities before mutations.","use_cases":[{"id":"content-prep-x-weighted-count","query":"Why does X say my post is too long when my document says it is under 280 characters?","primaryKeyword":"X character count","relatedQueries":["weighted tweet length","X post too long","t.co link length","emoji weighted length","family emoji X count","Japanese X post length","CJK weighted characters","X hashtag character count","X reply character count","X leading mention","X Unicode normalization","Why does X say my post is too long when my document says it is under 280 characters?","How many X characters does a long article link actually use?","How many characters does an emoji use on X, including skin tones and family emoji?","Why does my Japanese, Chinese, or Korean X post run out of room before 280 characters?","How many characters do my hashtags add to an X post?","How should I rewrite an X post that starts with an @mention?","Do the account names automatically added to an X reply count toward 280?","Can I schedule an X post longer than 280 characters, and which mentions get notified?","Why can two visually identical X drafts produce different technical character counts?"],"category":"Content preparation","audience":"People drafting standard X posts","task":"Review a draft against X's documented weighted-character rules, including URLs, emoji, CJK text, mentions, hashtags, and normalization effects, then use the official X composer for final validation.","freeAsset":"X weighted-count guide","guide":["Paste the complete draft into a private document, including spaces, hashtags, mentions, emoji, URLs, and combining characters.","Use a simple code-point counter only as a rough check. X applies weighted rules, including a weight of 23 for valid URLs, so the result may differ.","Review leading mentions, emoji sequences, CJK text, and normalization differences before editing the draft conservatively.","Paste the final draft into the official X composer and use its displayed limit as the final validation."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Review this X draft locally using the documented categories that can differ from a simple Unicode code-point count: <DRAFT>. Identify URLs, emoji sequences, CJK text, combining sequences, mentions, hashtags, and any leading mention that may affect visibility or count. Do not claim an exact weighted length or validity. Instruct the user to paste the final draft into the official X composer for final validation. Do not publish or save anything.","paidNextStep":"A paid TimeToPost plan can schedule or publish a valid standard post to a connected X account.","availability":"guide-only","evidenceUrls":["https://docs.x.com/fundamentals/counting-characters","https://help.x.com/en/using-x/types-of-posts"],"evidenceType":"official-documentation","demandConfidence":"medium","demandNote":"No measured keyword volume is available. Confidence reflects documented weighted-count differences that can cause composer rejections.","aliases":["content-prep-x-link-budget","content-prep-x-emoji-weight","content-prep-x-cjk-count","content-prep-x-hashtag-budget","content-prep-leading-mention","content-prep-reply-mention-count","content-prep-nfc-normalization","content-prep-long-x-post"],"example":{"input":"Draft: @AcmeLabs We shipped the new report today https://example.com/very-long-article #launch 🚀","output":"Revised draft: We shipped the new report today for Acme Labs. Read the full article: https://example.com/very-long-article #launch 🚀","check":"The rewrite removes the leading mention from the start, keeps the link and emoji intact for composer validation, and preserves the message without claiming any special weighted character rule."}},{"id":"content-prep-x-alt-length","query":"What is the image description limit on X, and does alt text need to stay under 125 characters?","primaryKeyword":"X alt text limit","relatedQueries":["X image description length","alt text 1000 characters","alt text photo of","image text alt text","duplicate caption alt text","alt text abbreviations","objective alt text","What is the image description limit on X, and does alt text need to stay under 125 characters?","Should X alt text start with photo of or image of?","If words are baked into an image, should I copy all of them into the alt text?","Should alt text repeat a quote that is already in the post caption?","Should abbreviations such as Dr or Ave be expanded in X image descriptions?","How do I replace subjective phrases such as having fun in image alt text?"],"category":"Content preparation","audience":"Editors writing X image descriptions","task":"Use a simple Unicode code-point count as an editing aid for X image descriptions, then revise the description so it is objective, concise, and within X's field maximum.","freeAsset":"X alt text length guide","guide":["Paste only the image description into the TimeToPost Character Counter, excluding the visible caption.","Treat the result as a Unicode code-point count, not a grapheme count, and use X's documented 1,000-character maximum as a review target.","Remove unnecessary generic prefixes and unsupported guesses while retaining essential observable details and relevant abbreviations.","Confirm the final description in X's image-description field because the counter cannot guarantee platform acceptance."],"toolUrl":"https://timetopost.co/tools/character-counter/","mcpTools":[],"mcpPrompt":"Review this X image description locally: <ALT_TEXT>. Return JSON with a simple Unicode code-point count, a note that grapheme and platform counting can differ, repeatedDetails, and an optional conciseRevision. Do not enforce a 125-character cap or guarantee acceptance under X's 1,000-character field limit. Require final validation in X's image-description field. Do not save or publish.","paidNextStep":"A paid plan can attach confirmed alt text to uploaded media before an X post is published.","availability":"available","evidenceUrls":["https://help.x.com/en/using-x/write-image-descriptions","https://mefmobile.org/just-how-long-should-alt-text-be-theres-no-universal-character-limit/"],"evidenceType":"official-documentation","demandConfidence":"medium","demandNote":"No measured keyword volume is available. X officially documents the 1,000-character limit and discusses the obsolete 200 to 250 character cutoff.","aliases":["content-prep-x-alt-prefix","content-prep-image-text-placement","content-prep-caption-alt-overlap","content-prep-alt-abbreviations","content-prep-objective-alt-text"],"example":{"input":"Alt text draft: photo of a happy team at the office with a chart behind them","output":"Revised alt text: team members standing in an office beside a bar chart on a wall","check":"The revision drops the subjective word happy and keeps only observable details. It is framed as alt text only, without inventing a platform-specific limit or hidden metadata."}},{"id":"content-prep-alt-hashtag-separation","query":"Should I put hashtags in image alt text when they do not fit in the caption?","primaryKeyword":"hashtags in alt text","relatedQueries":["alt text hashtags","move hashtags from alt","CamelCase hashtags","accessible hashtags","capitalize hashtag words","hashtags in X reply","Should I put hashtags in image alt text when they do not fit in the caption?","How can I move overflow hashtags into an X reply without breaking the main image caption?","How should I format a multi-word hashtag for screen readers?"],"category":"Content preparation","audience":"Creators preparing accessible image posts","task":"Separate visual description from discovery hashtags, format multi-word hashtags accessibly, and place overflow tags in the correct visible field.","freeAsset":"Alt text and hashtag guide","guide":["Edit the visible caption, alt text, and hashtag list separately in a private document.","Remove hashtags from the alt text while retaining the image details a screen reader user needs.","Use CamelCase for multiword hashtags, such as #OpenDataDay, while preserving official capitalization for names and acronyms.","Keep remaining hashtags outside the alt field and validate the caption and any separate reply in the official X composer."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Clean these fields locally. Caption: <CAPTION>. Alt text: <ALT_TEXT>. Hashtags: <HASHTAGS>. Return JSON with cleanedAltText, removedHashtags, revisedCaption, replyDraft, and unresolvedTags. Alt text must remain a visual description. Do not claim an exact X weighted length or validity; instruct the user to validate the caption and reply in the official X composer. Do not save or publish.","paidNextStep":"A paid plan can upload media and publish an X post after the author supplies and confirms the final caption and alt text.","availability":"guide-only","evidenceUrls":["https://help.x.com/en/using-x/write-image-descriptions","https://accessible.org/social-media-content-accessibility/","https://docs.x.com/fundamentals/counting-characters","https://help.x.com/en/using-x/types-of-posts"],"evidenceType":"official-documentation","demandConfidence":"low","demandNote":"No measured keyword volume is available. Official guidance defines alt text as an image description, and the hashtag formatting advice is based on accessibility guidance.","aliases":["content-prep-x-tag-reply","content-prep-camelcase-hashtags"],"example":{"input":"Caption: New event details below. Alt text: #OpenDataDay poster at the library. Hashtags: open data day, civic tech","output":"Revised caption: New event details below. Hashtags: #OpenDataDay #CivicTech. Cleaned alt text: poster at a library","check":"The hashtags are moved out of alt text, the multiword tags are normalized in CamelCase, and the alt text stays descriptive without adding unsupported details such as a date or specific venue name."}},{"id":"content-prep-chart-map-alt","query":"How do I describe a chart or map on X without copying the entire dataset?","primaryKeyword":"chart alt text","relatedQueries":["map image description","data visualization alt text","How do I describe a chart or map on X without copying the entire dataset?"],"category":"Content preparation","audience":"Researchers, journalists, and analysts","task":"Write findings-focused alt text for charts and maps, summarize the main takeaway, and keep source details in the visible post.","freeAsset":"Chart and map description guide","guide":["Identify the graphic type, main takeaway, relevant labels, units, extremes, and supplied source before drafting.","Describe the principal trend or geographic pattern instead of reproducing every plotted value.","Include labels and comparisons needed to understand the graphic, but omit decorative controls and irrelevant series names.","Place the supplied source URL in the visible post and validate the completed post in the official X composer."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Create a findings-focused X image description locally. Chart type: <TYPE>. Takeaway: <TAKEAWAY>. Extremes: <EXTREMES>. Labels: <LABELS>. Source URL: <URL>. Return JSON with altText, visiblePostSourceSentence, and omittedNonessentialDetails. Do not claim exact platform character counts or validity. Require final checks in X's composer and image-description field. Do not save or publish.","paidNextStep":"A paid plan can publish the chart and confirmed description to a connected X account when the required connection and scopes are available. Analytics depend on the connected account and granted scopes.","availability":"guide-only","evidenceUrls":["https://help.x.com/en/using-x/write-image-descriptions","https://docs.x.com/fundamentals/counting-characters"],"evidenceType":"official-documentation","demandConfidence":"medium","demandNote":"No measured keyword volume is available. X provides a detailed map-description example and documented limits, but demand volume was not measured.","aliases":[],"example":{"input":"Chart type: line chart. Takeaway: sales rose after July. Extremes: 120 in January, 240 in September. Labels: months, sales in USD.","output":"Alt text: line chart showing sales rising after July, from 120 in January to 240 in September, with months on the x-axis and sales in USD on the y-axis.","check":"The description covers the chart type, overall trend, and the supplied values without listing a full dataset. It does not add any unsupported map or location details."}},{"id":"content-prep-article-to-x","query":"How can I turn an article into X posts that each fit the standard limit?","primaryKeyword":"article to X posts","relatedQueries":["repurpose article for X","article thread draft","X thread to blog","posts to article","repurpose X thread","How can I turn an article into X posts that each fit the standard limit?","How do I turn a set of X posts into a clean blog draft?"],"category":"Content preparation","audience":"Content and SEO writers with an existing article","task":"Create source-grounded X drafts from an article, then optionally repurpose X posts back into a clean blog outline without inventing unsupported claims.","freeAsset":"Article-to-X drafting guide","guide":["Provide the article text or a public source URL and the desired number of posts.","Extract only source-supported claims, then give the opening and each middle post one clear standalone point.","If a source URL was provided, place it in the final post; account for X's URL weighting during planning, and validate every draft in the official composer.","Before reusing the posts as an outline, remove thread markers, repost requests, leading mentions, and reach-only hashtags."],"toolUrl":null,"mcpTools":["whoami","get_capabilities","create_posts_from_source","get_source_status"],"mcpPrompt":"First call whoami, then get_capabilities. Show the authenticated organization and require explicit confirmation that <ORGANIZATION> is correct. Only if create_posts_from_source is reported as available and supports the supplied source type, use it to create X drafts from <PUBLIC_SOURCE_URL_OR_SUPPORTED_SOURCE>. Do not approve, schedule, publish, or autosend. Then use get_source_status if that capability is available. Return JSON with organization, sourceStatus, drafts containing text and sourceClaim, unsupportedClaims, and composerValidationRequired. Do not claim exact weighted lengths or validity; require final validation in the official X composer.","paidNextStep":"TimeToPost paid plans can retain generated drafts and schedule approved standard posts to X, subject to plan limits.","availability":"guide-only","evidenceUrls":["https://docs.x.com/fundamentals/counting-characters","https://help.x.com/en/using-x/types-of-posts","https://dev.to/wfgsss/repurpose-twitter-threads-into-blog-posts-a-complete-workflow-mm4"],"evidenceType":"hypothesis","demandConfidence":"low","demandNote":"No measured keyword volume is available. The output format is a product hypothesis constrained by official X counting and mention rules.","aliases":["content-prep-x-to-blog"],"example":{"input":"Synthetic source excerpt: \"Battery recycling begins with collection at designated drop-off sites. Facilities then sort batteries by chemistry because different battery types require different recovery processes. Recovery facilities extract reusable materials such as lithium, nickel, and cobalt.\" Need 3 X posts.","output":"Post 1: Battery recycling starts with collection at designated drop-off sites.\n\nPost 2: Facilities sort batteries by chemistry because different battery types require different recovery processes.\n\nPost 3: Recovery facilities can extract reusable materials such as lithium, nickel, and cobalt.","check":"Each post is a concrete derivative of the synthetic source excerpt, contains only supplied facts, and is under 280 characters."}},{"id":"scheduling-zone-anchor","query":"How do I schedule for a named timezone without changing my computer clock?","primaryKeyword":"timezone scheduler","relatedQueries":["convert post timezone","schedule in another timezone","convert event time","device clock conversion","browser timezone mismatch","cross timezone date","How do I schedule for a named timezone without changing my computer clock?","How do I schedule a discussion post one hour before an event in Eastern time?","How do I schedule for the account's previous calendar date while traveling?","How do I convert an audience activity chart when its timezone differs from my scheduler?","How do I verify both the date and time when scheduling between Canada and Australia?","How can I detect that my browser timezone differs from the timezone I intend to schedule in?","What time should I type into a device-clock scheduler without changing my system timezone?"],"category":"Scheduling","audience":"Remote social media operators","task":"Convert a civil time in one named timezone into the operator's local time and UTC, while checking for device-clock mismatches and date changes.","freeAsset":"Timezone scheduling guide","guide":["Record the target date and time with its IANA zone, such as 2026-11-03 20:00 America/New_York.","Record the operator or device IANA zone so you know which local clock the scheduler will use.","Use a date-aware converter with current IANA data to obtain the operator-local time and UTC instant.","Verify the offsets, abbreviations, and calendar dates before manually entering the result into the scheduler."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Provide a manual conversion checklist for {event_datetime}, {event_iana_zone}, and {operator_iana_zone}. Do not calculate or claim an exact conversion unless a date-aware IANA timezone service is actually available. Require independent verification of the UTC instant, local dates, offsets, and abbreviations, and include a mismatch check when the browser or device zone differs from the intended zone.","paidNextStep":"A paid account can schedule the confirmed UTC instant as an X post, subject to its plan limits.","availability":"guide-only","evidenceUrls":["https://old.reddit.com/r/ModSupport/comments/1iqzdbi/timezones_on_scheduled_posts_any_news_on_a_fix/","https://www.reddit.com/r/FacebookAds/comments/18nk9up/scheduling_posts_time_zone/","https://www.reddit.com/r/royalroad/comments/y8k711/how_does_rr_scheduling_work/"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. Multiple operators described device-clock and timezone conversion problems, but visible discussion volume was small.","aliases":["scheduling-lead-time","scheduling-date-line","scheduling-two-clocks","scheduling-dual-date","scheduling-browser-mismatch","scheduling-no-clock-change"],"example":{"input":"Invented illustrative data: event_datetime=2026-11-10 21:00, event_iana_zone=America/New_York, operator_iana_zone=Europe/Berlin","output":"The same instant is 2026-11-11 02:00 UTC and 2026-11-11 03:00 in Europe/Berlin, while it remains 2026-11-10 21:00 in America/New_York.","check":"This corrects the timezone math: 21:00 in New York on 2026-11-10 is 02:00 UTC the next day and 03:00 in Berlin. The dates and offsets are consistent."}},{"id":"scheduling-season-dst","query":"How do I keep weekly posts anchored to US Eastern when daylight saving dates differ?","primaryKeyword":"DST schedule","relatedQueries":["weekly timezone shift","Eastern time DST","civil time recurrence","fixed local time schedule","GMT BST checker","London time abbreviation","How do I keep weekly posts anchored to US Eastern when daylight saving dates differ?","Is this London event time GMT or BST on the selected date?","How do I audit posts already scheduled across a daylight-saving change?","How do I keep a recurring post at the same local time after daylight saving changes?"],"category":"Scheduling","audience":"Operators managing international event seasons","task":"Build a weekly civil-time schedule and identify weeks when the cross-zone offset changes or abbreviations switch.","freeAsset":"Seasonal DST scheduling guide","guide":["Choose the anchor IANA zone and recurring civil time, then list every event date in the season.","Convert each dated occurrence separately to UTC and the operator zone so the intended wall time survives DST changes.","Record the returned abbreviation and flag any week whose zone gap changes.","For an existing queue, compare stored UTC timestamps with the intended local times and correct only verified mismatches."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Provide a manual procedure for listing each dated occurrence of {weekday} at {civil_time} in {anchor_iana_zone} from {start_date}, then converting every row separately with a date-aware IANA timezone service. Require verification of changed offsets and abbreviations, and include a read-only audit mode for existing scheduled rows when {queue_rows} are supplied. Do not generate exact timestamps without that service and do not edit, approve, publish, or reschedule anything.","paidNextStep":"Confirmed occurrences can be added individually to an X schedule so each UTC instant is explicit.","availability":"guide-only","evidenceUrls":["https://old.reddit.com/r/ModSupport/comments/1iqzdbi/timezones_on_scheduled_posts_any_news_on_a_fix/","https://old.reddit.com/r/AutoModerator/comments/9sqsji/scheduling_timezone_issues/","https://www.reddit.com/r/VirtualYoutubers/comments/tdqz65/psa_for_vtubers_check_your_timezones_about_the/"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. Operators described daylight-saving mismatches between Europe and US Eastern and recurring wall-time shifts.","aliases":["scheduling-civil-recurrence","scheduling-dst-queue-audit","scheduling-gmt-bst"],"example":{"input":"Invented illustrative data: weekday=Thursday, civil_time=20:00, anchor_iana_zone=America/New_York, start_date=2026-10-29","output":"The first two occurrences are 2026-10-29 20:00 EDT and 2026-11-05 20:00 EST, with different UTC offsets because daylight saving ends between those dates.","check":"Both entries keep the same local clock time, and the abbreviation changes from EDT to EST after the DST transition. No unsupported scheduling aliasing or automation promise is implied."}},{"id":"scheduling-viewer-clock","query":"What date and time will viewers in another timezone see on my post?","primaryKeyword":"viewer time preview","relatedQueries":["post timestamp timezone","viewer local time","multi timezone announcement","event time zone list","international stream time","How do I write one event announcement for US, European, and Japanese viewers?","What date and time will viewers in another timezone see on my post?"],"category":"Scheduling","audience":"Creators explaining global post times","task":"Preview one publication instant in several viewer-local timezones and produce a single announcement line that remains anchored to the same UTC instant.","freeAsset":"Viewer timezone guide","guide":["Record the publisher's dated local time and IANA zone.","Convert it to UTC once to establish a single publication instant.","Convert that UTC instant into each viewer's IANA zone and note any calendar-date changes.","Write announcements with each local date, time, and zone abbreviation so viewers do not need to infer the date."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Provide a checklist for converting {publisher_local_datetime} in {publisher_iana_zone} to UTC and then to {viewer_iana_zones} using a date-aware IANA timezone service. Require full-date display and verification, and keep every listed zone tied back to the same UTC instant. Do not claim exact viewer timestamps without that service.","paidNextStep":"If a viewer-local target is selected, its confirmed UTC instant can then be scheduled on X.","availability":"guide-only","evidenceUrls":["https://www.reddit.com/r/explainlikeimfive/comments/t08e0h/eli5_how_does_social_media_appwebsites_show_time/","https://www.reddit.com/r/VirtualYoutubers/comments/tdqz65/psa_for_vtubers_check_your_timezones_about_the/"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. The source directly asks which time appears for a viewer and discusses calendar-date changes.","aliases":["scheduling-multizone-line"],"example":{"input":"Synthetic data: publisher_local_datetime=2026-10-02 19:00, publisher_iana_zone=Asia/Tokyo, viewer_iana_zones=[America/New_York, America/Los_Angeles]","output":"2026-10-02 19:00 in Asia/Tokyo is 2026-10-02 10:00 UTC. The same instant is 2026-10-02 06:00 in America/New_York and 2026-10-02 03:00 in America/Los_Angeles.","check":"Tokyo is UTC+9 throughout the year. On 2026-10-02, New York is UTC-4 and Los Angeles is UTC-7, so Tokyo is 13 hours ahead of New York and 16 hours ahead of Los Angeles."}},{"id":"scheduling-approval-gate","query":"How do I prevent an unapproved post from reaching the schedule?","primaryKeyword":"content approval workflow","relatedQueries":["approve before scheduling","social post signoff","X post drafts","draft social calendar","review posts before schedule","crosspost template","manual crossposting","How do I prevent an unapproved post from reaching the schedule?","How do I prepare one scheduled X post and a manual version for another network?","How do I prepare several X posts as drafts before scheduling any of them?"],"category":"Scheduling","audience":"Agencies and client content teams","task":"Keep pending content in drafts and require explicit approval before scheduling, while preserving separate manual copy for other networks when needed.","freeAsset":"Manual approval gate guide","guide":["In a manual checklist, record the draft body, proposed approver, internal approval deadline, and proposed publish time.","Confirm manually that the deadline precedes publication and keep pending, rejected, or unassigned items blocked.","After explicit signoff, recheck the final body and time before performing a separate manual scheduling action.","Validate X text in the official composer and do not assume the scheduling API stores approver or deadline metadata."],"toolUrl":"/tools/character-counter/","mcpTools":["whoami","get_capabilities","create_drafts","list_drafts","list_approvals"],"mcpPrompt":"First call whoami, then get_capabilities, show the authenticated organization, and require explicit confirmation that {organization_name} is correct. Only if create_drafts, list_drafts, and list_approvals are reported as available and authorized, create draft-only records from {content_rows} and read their approval state. Return JSON with draft_id, approver when available, approve_by, proposed_publish_at, status, and blocking_reasons. Do not approve, schedule, publish, autosend, or auto-crosspost anything.","paidNextStep":"Paid workflows can retain drafts and approval records; scheduling remains a separate human-confirmed action after approval.","availability":"guide-only","evidenceUrls":["https://www.reddit.com/r/socialmedia/comments/1l5fjpx/a_fullblown_social_media_scheduler_on_google"],"evidenceType":"observed-discussion","demandConfidence":"low","demandNote":"No measured keyword volume. One agency-oriented comment said approval through sheets, email, or chat does not scale.","aliases":["scheduling-x-draft-queue","scheduling-crosspost-pack"],"example":{"input":"Synthetic example: Post text is \"Launch note.\" Proposed publication time is 2026-10-01 16:00 UTC. Publication requires Mina's manual approval.","output":"MANUAL APPROVAL CHECKLIST\n[ ] Mina reviewed the exact text: \"Launch note.\"\n[ ] Mina confirmed the intended account.\n[ ] Mina confirmed the publication time: 2026-10-01 16:00 UTC.\n[ ] Mina approved publication.\n\nDo not schedule or publish unless every item is manually checked.","check":"The output provides a manual approval gate and does not claim that an approver, deadline, approval state, or schedule was stored."}},{"id":"scheduling-csv-datetime","query":"What datetime format should I use in a bulk scheduling CSV?","primaryKeyword":"schedule CSV format","relatedQueries":["ISO post datetime","bulk schedule template","natural language schedule","resolve schedule phrase","content calendar collisions","overlapping post times","What datetime format should I use in a bulk scheduling CSV?","How do I turn 'tomorrow at 4pm' into an exact scheduled timestamp?","How do I combine several channel schedules and find posts that collide?"],"category":"Scheduling","audience":"Spreadsheet-based content operators","task":"Create an unambiguous schedule CSV using offset-bearing ISO-8601 timestamps, and sort or validate combined rows before import.","freeAsset":"CSV datetime guide","guide":["Create body, publish_at, and network columns so each row has one destination and one explicit instant.","Write publish_at in ISO 8601 with an offset or Z, such as 2026-10-06T09:00:00-04:00.","Resolve natural-language times against a stated reference date and IANA zone before entering them.","Parse accepted rows back to UTC, verify the intended local date, sort chronologically, and flag timing collisions."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Validate CSV text {csv_text}. Require body, publish_at, and network. Return JSON with accepted_rows, rejected_rows containing row and error, and cleaned_csv. Accept only ISO-8601 timestamps with an explicit offset or Z. If natural-language phrases appear, resolve them only when a reference instant and timezone are present. Mark networks other than x as manual_export.","paidNextStep":"After capability and plan checks, confirmed X rows may be entered through an authenticated scheduling workflow. Other network rows remain manual exports unless the platform is publicly supported.","availability":"guide-only","evidenceUrls":["https://www.reddit.com/r/socialmedia/comments/1l5fjpx/a_fullblown_social_media_scheduler_on_google"],"evidenceType":"hypothesis","demandConfidence":"low","demandNote":"No measured keyword volume. Spreadsheet scheduling was discussed, but the specific ISO-8601 CSV contract is a proposed safe workflow rather than an observed request.","aliases":["scheduling-relative-phrase","scheduling-week-collisions"],"example":{"input":"Synthetic CSV row: body=Hello, publish_at=2026-10-06T09:00:00-04:00, network=x","output":"Use publish_at=2026-10-06T09:00:00-04:00. Its UTC equivalent is 2026-10-06T13:00:00Z.","check":"The timestamp includes an explicit UTC-4 offset. Adding four hours to 09:00 gives 13:00 UTC on the same date. The example does not claim that an unspecified importer accepted the row."}},{"id":"scheduling-us-baseline","query":"Should I start with Eastern time when my X audience is spread across the United States?","primaryKeyword":"best time US X","relatedQueries":["Eastern posting time","US audience schedule","best posting hour","X analytics posting time","rank post times","Should I start with Eastern time when my X audience is spread across the United States?","How do I rank posting hours using my own X performance data?"],"category":"Scheduling","audience":"US-focused X account operators","task":"Use a source-labeled public timing curve as a baseline and, when account data is available, compare it with your own performance data before choosing a window.","freeAsset":"Best Time to Post guide","guide":["Open Best Time to Post and treat its result as a public baseline, not personalized account analytics.","Choose a candidate window and record the target date so daylight-saving changes remain visible.","Use a separate date-aware IANA converter to translate that dated instant across US time zones.","If account analytics are available, compare the baseline with sufficiently sampled weekday and hour groups before choosing a window."],"toolUrl":"/tools/best-time-to-post-calculator/","mcpTools":["best_time_teaser","whoami","get_capabilities","get_engagement_summary","get_optimal_times"],"mcpPrompt":"Use best_time_teaser for {platform} and {region_or_timezone}. Return JSON with source_label, candidate_windows, timezone, and limitations. Describe results as a public baseline, not this account's measured optimum. If account analytics are available, only after calling whoami and get_capabilities, and only with the required scopes, read {date_range} using get_engagement_summary and get_optimal_times. Return the account-derived data separately with post_count_per_window when supplied by the tools, metric_basis, and sample_limitations. Do not schedule or publish.","paidNextStep":"When account analytics are connected and the required scopes are available, Pro can help an operator compare available account performance with the public baseline and schedule a chosen X time.","availability":"available","evidenceUrls":["https://timetopost.co/best-time-to-post/"],"evidenceType":"official-documentation","demandConfidence":"medium","demandNote":"No measured keyword volume. The question appears in product documentation, but documentation alone does not establish high demand.","aliases":["scheduling-own-hour-rank"],"example":{"input":"Invented illustrative data: platform=x, region_or_timezone=US Eastern, date_range=2026-10-01 to 2026-10-31","output":"Illustrative guidance only: use US Eastern as a baseline if your audience is nationwide, then compare it with account analytics when available.","check":"The wording is clearly nonexclusive and nonpersonalized, and it does not pretend to return ranked candidate windows or hidden analytics results."}},{"id":"website-seo-01","slug":"website-seo-robots-blocked-snippet","query":"Why does Google say my description is unavailable because of robots.txt?","primaryKeyword":"robots.txt snippet","relatedQueries":["blocked search snippet","robots title issue","disallow vs noindex","snippet controls","sitemap ranking","Why does Google say my description is unavailable because of robots.txt?","Will disallowing tag and search URLs in robots.txt remove them from Google?","Does the Sitemap line have to be last in robots.txt?","How do I limit, remove, or exclude part of a search snippet?","How do I stop an XML sitemap from ranking instead of the real page?","What happens when a page has both index and noindex robots tags?"],"category":"Website SEO","audience":"CMS site owners whose titles, descriptions, snippets, or crawl access are missing from search results","task":"Check whether robots.txt blocks a specific page, separate crawl access from index control, and map snippet directives correctly.","freeAsset":"Robots access guide","guide":["Provide the robots.txt text, affected URL, and whether the page is intentionally public or private, then match its path against the relevant user-agent rules.","For an intentionally public page, inspect its source or response headers and reconcile crawl rules with any indexing or snippet directives.","Use noindex only for intentionally public pages that may be crawled but should not appear in search. Protect private content with authentication rather than changing robots rules to expose it.","Report the matched rule, crawl result, directive conflicts, and smallest safe change, then verify the resulting access behavior."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Analyze this robots and snippet input locally. Input: {\"robots_txt\":\"<ROBOTS_TEXT>\",\"url\":\"<PAGE_URL>\",\"goal\":\"show_snippet|exclude\",\"html_head\":\"<HEAD_HTML>\",\"x_robots_tag\":\"<HEADER_OR_NULL>\"}. Return JSON only with urlAllowed, matchedRule, titleCheckInstructions, descriptionCheckInstructions, snippetPolicy, exclusionDirective, and cautions. Do not claim to crawl the URL.","paidNextStep":"A paid TimeToPost plan can support related content drafting and scheduling workflows after the page issue is fixed, but it does not replace search-engine recrawling.","availability":"guide-only","evidenceUrls":["https://www.reddit.com/r/SEO/comments/32rw5f/wordpress_robotstxt_making_problems_with/","https://developers.google.com/search/docs/appearance/title-link","https://developers.google.com/search/docs/crawling-indexing/robots/intro","https://developers.google.com/search/docs/appearance/snippet","https://developers.google.com/search/docs/crawling-indexing/special-tags","https://developers.google.com/search/blog/2025/03/robots-refresher-page-level","https://www.reddit.com/r/SEO/comments/1fg3gks/am_i_doing_it_right_robottext_file/","https://www.reddit.com/r/SEO/comments/15l96ds/sitemap_ranking_for_a_keyword_instead_of_the/","https://support.google.com/webmasters/answer/183668"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. Forum reports cover blocked snippets, disallow confusion, and sitemap URLs ranking, while official documentation explains crawl access, noindex, and snippet directives.","aliases":["website-seo-02","website-seo-03","website-seo-08","website-seo-10","website-seo-14"],"example":{"input":"{\"robots_txt\":\"User-agent: *\\nDisallow: /private/\\nSitemap: https://example.com/sitemap.xml\",\"url\":\"https://example.com/private/report\",\"goal\":\"exclude\",\"html_head\":\"<head><title>Quarterly Report</title><meta name=\\\"robots\\\" content=\\\"index,follow\\\"></head>\",\"x_robots_tag\":null}","output":"{\"urlAllowed\":false,\"matchedRule\":\"Disallow: /private/\",\"explanation\":\"Google cannot crawl the blocked URL path, so it may show limited information or report that a description is unavailable because of robots.txt.\",\"recommendedFix\":\"First determine whether the page is public or private. If it is public but should be excluded from search, allow crawling and apply noindex on the page or via an HTTP header. If it is private, require authentication rather than relying on robots.txt or noindex.\",\"notes\":[\"robots.txt alone is not a reliable removal or access-control method\"]}","check":"The path is blocked by robots.txt, so the page is not crawlable. The output correctly distinguishes a public page that should use noindex from private content that should require authentication, without treating robots.txt as reliable removal or access control."}},{"id":"website-seo-04","slug":"website-seo-title-rewrite-diagnosis","query":"Why is Google's search title different from my title tag?","primaryKeyword":"Google title rewrite","relatedQueries":["title tag changed","search title mismatch","duplicate title tags","title language mismatch","boilerplate titles","unique page titles","Why is Google's search title different from my title tag?","How do I rewrite repetitive title tags so every page is distinguishable?","What should I do when the title is in a different language from the page?"],"category":"Website SEO","audience":"Publishers whose search result title differs from the HTML title, including multilingual and template-based sites","task":"Compare the title element with visible title signals, identify rewrite triggers, and rewrite repetitive or mismatched titles using page-specific facts.","freeAsset":"Title signal comparison guide","guide":["Collect each page's title element, first visible H1, og:title, site name, language, and a unique source-supported fact.","Check for vague wording, repeated keywords, duplicate site names, language mismatches, and boilerplate shared across pages.","Propose one accurate, page-specific title using the unique subject, and mark missing facts as needs_input or needs_translation instead of inventing text.","Use the TimeToPost SEO Audit to compare source signals and duplicates, while recognizing that search engines may display a different title."],"toolUrl":"/tools/seo-audit/","mcpTools":["seo_audit"],"mcpPrompt":"Run seo_audit with full=false for <PAGE_URL> or use the supplied batch rows. Then compare the returned page checks with these supplied fields: title=<TITLE>, h1=<H1>, og_title=<OG_TITLE>, site_name=<SITE_NAME>, language=<LANGUAGE>, approved_terms=<TERMS>. Return JSON with issues, proposedTitle, supportingSignals, and manualChecks. Do not promise that a search engine will use the proposal or invent missing page facts.","paidNextStep":"Paid plans can store related drafts and support content scheduling and analytics. Search-result title selection remains controlled by the search engine.","availability":"available","evidenceUrls":["https://developers.google.com/search/docs/appearance/title-link","https://www.reddit.com/r/SEO/comments/32rw5f/wordpress_robotstxt_making_problems_with/","https://webmasters.stackexchange.com/questions/56196/duplicate-meta-title-and-description-displayed-in-google-webmaster-tools","https://www.reddit.com/r/SEO/comments/1mhlyky/technical_seo_47_errors_i_found_in_50_sites_that/"],"evidenceType":"official-documentation","demandConfidence":"medium","demandNote":"No measured keyword volume. Official guidance describes title rewrites, boilerplate titles, and multilingual signal alignment, while observed discussions report the symptom.","aliases":["website-seo-05","website-seo-06"],"example":{"input":"{\"title\":\"Home | Example Site\",\"h1\":\"Blue Widget Installation Guide\",\"og_title\":\"Home | Example Site\",\"site_name\":\"Example Site\",\"language\":\"en\",\"approved_terms\":[\"Blue Widget\"]}","output":"{\"issues\":[\"Title is generic\",\"Title repeats site boilerplate\",\"Title does not match the page topic\"],\"proposedTitle\":\"Blue Widget Installation Guide | Example Site\",\"supportingSignals\":[\"H1 mentions Blue Widget Installation Guide\",\"Approved term Blue Widget is present\"],\"manualChecks\":[\"Confirm the title is unique on the site\",\"Verify the page is actually about Blue Widget installation\"]}","check":"The proposed title uses the page topic and keeps one site name, which is consistent with the H1. It avoids claiming the search engine will always use the title tag verbatim."}},{"id":"website-seo-07","slug":"website-seo-meta-description-batch","query":"How can I create unique meta descriptions for a large catalog?","primaryKeyword":"meta description generator","relatedQueries":["bulk meta descriptions","unique product descriptions","SEO head tags","CMS meta tags","view source SEO","How can I create unique meta descriptions for a large catalog?","How can I verify title, description, robots, and canonical tags on a CMS page?"],"category":"Website SEO","audience":"Catalog, directory, local, and news-site editors working from structured page fields","task":"Generate factual, unique meta descriptions from structured page fields and verify them in the page head.","freeAsset":"Meta description guide","guide":["List each URL with its page type, verified facts, and current head markup.","Write one readable description per URL using only facts visible and current on that page; mark missing facts when needed.","Compare descriptions and revise exact or near duplicates before publishing.","View the live source to check title and meta description counts, robots directives, absolute canonicals, and conflicts; search engines may still select other page text."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Create factual meta descriptions from: {\"pages\":[{\"url\":\"<URL>\",\"type\":\"article|product|local|other\",\"fields\":{\"name\":\"<NAME>\",\"author\":\"<AUTHOR>\",\"date\":\"<DATE>\",\"price\":\"<PRICE>\",\"location\":\"<LOCATION>\",\"hours\":\"<HOURS>\",\"summary\":\"<SUMMARY>\"}}],\"head_html\":\"<HEAD_HTML>\"}. Return JSON with url, metaDescription, status, usedFacts, duplicateGroup, titleFindings, descriptionFindings, robotsFindings, canonicalFindings, and manualSourceChecks. Do not invent facts or measured SEO outcomes.","paidNextStep":"Growth includes AutoSEO drafts at one per week. Those drafts can support broader content work, while website metadata changes still require the site's publishing system.","availability":"guide-only","evidenceUrls":["https://developers.google.com/search/docs/appearance/snippet","https://developers.google.com/search/docs/crawling-indexing/special-tags"],"evidenceType":"official-documentation","demandConfidence":"medium","demandNote":"No measured keyword volume. Official documentation recommends unique descriptions for large sites and describes snippet behavior and crawler meta tags.","aliases":["website-seo-09"],"example":{"input":"{\"pages\":[{\"url\":\"https://example.com/products/widget\",\"type\":\"product\",\"fields\":{\"name\":\"Blue Widget\",\"author\":\"\",\"date\":\"\",\"price\":\"$19.99\",\"location\":\"\",\"hours\":\"\",\"summary\":\"Compact replacement widget for home repairs\"}}],\"head_html\":\"<head><title>Blue Widget | Example Site</title><meta name=\\\"description\\\" content=\\\"Blue Widget replacement part for home repairs. Ships for $19.99.\\\"></head>\"}","output":"{\"url\":\"https://example.com/products/widget\",\"metaDescription\":\"Blue Widget replacement part for home repairs. Price $19.99.\",\"status\":\"ok\",\"usedFacts\":[\"name\",\"price\",\"summary\"],\"duplicateGroup\":null,\"titleFindings\":{\"titleCount\":1},\"descriptionFindings\":{\"descriptionCount\":1},\"robotsFindings\":{\"conflicts\":[]},\"canonicalFindings\":{\"canonicalCount\":0},\"manualSourceChecks\":[\"Confirm the price is current on the live page\"]}","check":"The revised description uses only supplied facts and avoids conflating price with shipping. It stays specific to the product, remains unique, and does not add unsupported claims. The output is concrete and complete, with one meta description and the existing validation fields preserved."}},{"id":"website-seo-11","slug":"website-seo-duplicate-home-canonical","query":"How should I canonicalize duplicate home URLs such as / and /home?","primaryKeyword":"homepage canonical","relatedQueries":["duplicate home URL","noncanonical sitemap URL","canonical variants","hub page canonical","tracking parameter canonical","cross-domain canonical","sitemap cleanup","duplicate title tags","How should I canonicalize duplicate home URLs such as / and /home?","Which 404 or noncanonical URLs should I remove from my sitemap?","Should a syndicated copy with a cross-domain canonical be in its sitemap?","Should related variant pages canonicalize to a hub or remain separate pages?","Should a canonical URL include UTM tracking parameters?"],"category":"Website SEO","audience":"Developers and site owners managing duplicate homepage routes, variant pages, tracking parameters, and sitemap signals","task":"Select preferred URLs, align canonicals and sitemaps, and decide when variants should be merged or kept separate.","freeAsset":"Canonical alignment guide","guide":["List each variant URL with its current canonical, sitemap and redirect status, host, internal links, and content summary.","For true duplicates, select one absolute HTTPS preferred URL, point duplicate canonicals to it, omit tracking parameters from canonicals, and redirect where appropriate.","For distinct pages, use self-referencing canonicals, unique factual descriptions, and sitemap inclusion on the page's own host.","Remove 404 and 410 URLs from sitemaps and report canonical changes, redirects, sitemap decisions, retained parameters, and remaining conflicts."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Resolve this URL cluster locally: {\"preferred_url\":\"<PREFERRED_URL>\",\"cluster\":[{\"url\":\"<URL>\",\"canonical\":\"<CANONICAL>\",\"in_sitemap\":true,\"internally_linked\":true,\"redirect_status\":\"<STATUS>\",\"host\":\"<HOST>\",\"summary\":\"<SUMMARY>\"}],\"functional_parameters_to_keep\":[\"<PARAM>\"],\"copy_url\":\"<COPY_URL>\",\"canonical_url\":\"<CANONICAL_URL>\",\"copy_sitemap_host\":\"<COPY_HOST>\",\"canonical_sitemap_host\":\"<CANONICAL_HOST>\",\"sitemap_response_headers\":\"<HEADERS>\"}. Return JSON with preferredUrl, canonicalChanges, sitemapKeep, sitemapRemove, linksToRetarget, redirectCandidates, removedTrackingParameters, retainedParameters, copySitemapDecision, canonicalSitemapDecision, relCanonical, conflicts, and manualChecks. Do not claim to crawl or guarantee which URL a search engine will show.","paidNextStep":"Paid TimeToPost plans can support content and distribution around the corrected canonical URL, but canonical, redirect, and sitemap implementation stays in the website stack.","availability":"guide-only","evidenceUrls":["https://webmasters.stackexchange.com/questions/138488/semrush-says-sitemap-xml-contains-an-incorrect-page-due-to-non-canonical-url","https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls","https://support.google.com/webmasters/answer/139066","https://support.google.com/webmasters/answer/183668","https://webmasters.stackexchange.com/questions/135779/what-to-do-when-you-have-sitemap-xml-and-canonical-url","https://www.reddit.com/r/SEO/comments/1mhlyky/technical_seo_47_errors_i_found_in_50_sites_that/","https://www.reddit.com/r/SEO/comments/x74vwq/missing_meta_descriptions_on_pages_with_canonical/"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. Forum and Stack Exchange questions cover duplicate home URLs, sitemap and canonical conflicts, noncanonical sitemap rows, syndicated copies, and parameterized canonicals.","aliases":["website-seo-12","website-seo-13","website-seo-15","website-seo-16"],"example":{"input":"{\"preferred_url\":\"https://example.com/\",\"cluster\":[{\"url\":\"https://example.com/home\",\"canonical\":\"https://example.com/home\",\"in_sitemap\":true,\"internally_linked\":true,\"redirect_status\":\"200\",\"host\":\"example.com\",\"summary\":\"Homepage\"},{\"url\":\"https://example.com/?utm_source=newsletter\",\"canonical\":\"https://example.com/?utm_source=newsletter\",\"in_sitemap\":false,\"internally_linked\":false,\"redirect_status\":\"200\",\"host\":\"example.com\",\"summary\":\"Homepage with tracking parameter\"}],\"functional_parameters_to_keep\":[],\"copy_url\":\"https://news.example.org/article\",\"canonical_url\":\"https://example.com/article\",\"copy_sitemap_host\":\"news.example.org\",\"canonical_sitemap_host\":\"example.com\",\"sitemap_response_headers\":\"X-Robots-Tag: noindex\"}","output":"{\"preferredUrl\":\"https://example.com/\",\"canonicalChanges\":[{\"url\":\"https://example.com/home\",\"canonical\":\"https://example.com/\"},{\"url\":\"https://example.com/?utm_source=newsletter\",\"canonical\":\"https://example.com/\"}],\"sitemapKeep\":[\"https://example.com/\"],\"sitemapRemove\":[\"https://example.com/home\"],\"linksToRetarget\":[\"https://example.com/home\",\"https://example.com/?utm_source=newsletter\"],\"redirectCandidates\":[\"https://example.com/home\"],\"removedTrackingParameters\":[\"utm_source\"],\"retainedParameters\":[],\"copySitemapDecision\":\"omit copy URL from news.example.org sitemap\",\"canonicalSitemapDecision\":\"include preferred URL only on example.com sitemap\",\"relCanonical\":\"https://example.com/article\",\"conflicts\":[\"copy URL canonicalizes to another host\",\"sitemap header noindex should be verified on live response\"],\"manualChecks\":[\"Verify the preferred homepage returns 200\",\"Verify internal links point to the preferred URL\"]}","check":"The canonicalization consolidates both duplicate home URLs to the preferred root and strips the tracking parameter from the canonical target. It also keeps the syndicated copy out of the wrong-host sitemap. The output remains factual and concrete without inventing redirects or response details not present in the input."}},{"id":"website-seo-17","slug":"website-seo-contextual-internal-links","query":"Which existing pages should a new article link to?","primaryKeyword":"internal link suggestions","relatedQueries":["contextual internal links","link from new article","orphan page priority","deep page internal links","internal link audit","Which existing pages should a new article link to?","Which pages should receive internal links first?"],"category":"Website SEO","audience":"Bloggers, editors, and site owners managing internal-link maintenance","task":"Select relevant internal destinations and prioritize pages that need links first using a supplied draft and page inventory.","freeAsset":"Internal link suggestion guide","guide":["Number the draft paragraphs and list candidate pages with URL, title, summary, indexability, inbound link count, and homepage click depth.","Choose no more than one directly relevant destination per paragraph and draft a natural anchor from the existing sentence.","Exclude intentionally noindex targets; prioritize pages with no inbound internal links, then pages four or more clicks from the homepage.","Verify each source and destination manually, then report the paragraph, destination, anchor, relevance, skipped candidates, and priority reason."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Suggest internal links from supplied text only: {\"draft_paragraphs\":[\"<PARAGRAPH>\"],\"inventory\":[{\"url\":\"<URL>\",\"title\":\"<TITLE>\",\"summary\":\"<SUMMARY>\"}],\"pages\":[{\"url\":\"<URL>\",\"indexable\":true,\"inbound_internal_links\":0,\"depth_from_home\":4}],\"source_pages\":[{\"url\":\"<URL>\",\"title\":\"<TITLE>\",\"summary\":\"<SUMMARY>\"}],\"max_links\":3}. Return JSON with links containing paragraphIndex, url, anchor, reason, plus skipped candidates, queue items, and validationNotes. Do not infer content from URLs alone.","paidNextStep":"Growth AutoSEO drafts can support ongoing article creation. Pro includes unlimited scheduling and analytics for approved social promotion, but it does not imply automated website link insertion.","availability":"guide-only","evidenceUrls":["https://www.reddit.com/r/TechSEO/comments/1lj9hxo/internal_linking_100_on_autopilot/","https://www.reddit.com/r/Wordpress/comments/1wkqvu5/promo_i_built_a_free_internal_linking_plugin_for/","https://www.reddit.com/r/TechSEO/comments/1mwdv0c/pillar_cluster_qa_checklist_i_use_to_prevent/"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. Observed discussions describe manual contextual link selection, orphan-page prioritization, and pillar-cluster maintenance.","aliases":["website-seo-18"],"example":{"input":"{\"draft_paragraphs\":[\"Blue widgets come in several sizes. Choose the right fit before installation.\"],\"inventory\":[{\"url\":\"https://example.com/guides/widget-sizing\",\"title\":\"Widget Sizing Guide\",\"summary\":\"Explains how to choose the correct widget size\"},{\"url\":\"https://example.com/guides/widget-installation\",\"title\":\"Widget Installation Guide\",\"summary\":\"Shows how to install a widget\"}],\"pages\":[{\"url\":\"https://example.com/deep-page\",\"indexable\":true,\"inbound_internal_links\":0,\"depth_from_home\":4}],\"source_pages\":[{\"url\":\"https://example.com/guides/widget-sizing\",\"title\":\"Widget Sizing Guide\",\"summary\":\"Explains how to choose the correct widget size\"}],\"max_links\":3}","output":"{\"links\":[{\"paragraphIndex\":1,\"url\":\"https://example.com/guides/widget-sizing\",\"anchor\":\"choose the right fit\",\"reason\":\"The paragraph discusses size selection\"}],\"skippedCandidates\":[{\"url\":\"https://example.com/guides/widget-installation\",\"reason\":\"Not chosen because only one directly relevant destination should be linked per paragraph\"}],\"queueItems\":[{\"url\":\"https://example.com/deep-page\",\"priorityReason\":\"zero inbound internal links and depth 4\"}],\"validationNotes\":[\"Verify the linked page is indexable and reachable\"]}","check":"The links are now concrete and aligned to the paragraph content. Both inventory pages are relevant, so neither is wrongly skipped. The orphan page is still queued because it has no inbound internal links and sits four clicks from home, which supports prioritization."}},{"id":"ai-visibility-llms-lint","query":"Is my llms.txt valid, or did I write it like robots.txt?","primaryKeyword":"llms.txt validator","relatedQueries":["llms.txt format","validate llms.txt","Is my llms.txt valid, or did I write it like robots.txt?"],"category":"AI visibility","audience":"Developers and technical editors","task":"Validate llms.txt structure against the published markdown proposal and identify robots.txt directives that do not belong.","freeAsset":"llms.txt lint guide","guide":["Paste and number the complete unchanged file; label partial input as incomplete.","Check for plain Markdown with one H1, an optional blockquote summary, clear H2 sections, and Optional only for links that may be skipped.","Under each H2, verify valid Markdown links with optional short notes and flag malformed, duplicated, or unlinked entries by line.","Flag robots.txt directives such as User-agent, Disallow, Allow, and Crawl-delay, and recommend keeping crawler rules in robots.txt."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Review this llms.txt locally without calling an MCP tool: {{LLMS_TXT}}. Return JSON with valid, errors containing line and message, h1, summary, and sections containing heading and links. Apply the published markdown proposal only and flag robots.txt directives.","paidNextStep":"No paid TimeToPost feature validates or monitors llms.txt. Growth includes AutoSEO drafts once per week, but that is a separate content workflow.","availability":"guide-only","evidenceUrls":["https://llmstxt.org/","https://www.reddit.com/r/llmscentral/comments/1nvseck/how_to_create_an_llmstxt_file_stepbystep_tutorial","https://www.reddit.com/r/AISearchLab/comments/1mzzdqv/what_is_the_right_way_to_create_an_llmstxt"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. Two discussion excerpts show confusion between the markdown proposal and robots.txt-style files.","aliases":[],"example":{"input":"Example llms.txt\n# Acme Docs\n> Product documentation\n## Guides\n- [Start](/start) Quick start guide\nUser-agent: *\nDisallow: /private","output":"{\"valid\":false,\"errors\":[{\"line\":5,\"message\":\"robots.txt directive not allowed in llms.txt: User-agent\"},{\"line\":6,\"message\":\"robots.txt directive not allowed in llms.txt: Disallow\"}],\"h1\":\"Acme Docs\",\"summary\":\"Product documentation\",\"sections\":[{\"heading\":\"Guides\",\"links\":[{\"title\":\"Start\",\"url\":\"/start\",\"note\":\"Quick start guide\"}]}]}","check":"The markdown structure is preserved while the two robots.txt style directives are flagged as invalid. The file is correctly marked invalid, and the summary and section link are kept intact without inventing extra structure or behavior."}},{"id":"ai-visibility-llms-path","query":"Should llms.txt be at the site root or beside my docs?","primaryKeyword":"llms.txt location","relatedQueries":["path scoped llms.txt","docs llms.txt","Should llms.txt be at the site root or beside my docs?","What clean markdown URL should an agent open for this HTML page?","How can clients discover a page's markdown version and covering llms.txt?"],"category":"AI visibility","audience":"Documentation owners and web developers","task":"Check whether an llms.txt file is published at the conventional site-root location and document any additional project-specific files without treating them as a hierarchical override system.","freeAsset":"llms.txt path guide","guide":["Record the site origin, page URL, and conventional root file at /llms.txt; remove query strings and fragments from the page URL.","Check the root file's final response status and content type, confirming it serves the Markdown file rather than an HTML error.","Record intentionally published project files such as /docs/llms.txt with their stated scope; mark undocumented scope as unknown.","Compare each selected file's links with its stated scope and report out-of-scope links without inventing precedence rules."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Given {{PAGE_URL}}, the manually collected status for the conventional root file, and any site-documented additional files in {{CANDIDATE_STATUSES}}, return JSON with rootFile, additionalFiles, documentedScope, recommendedFile, reasoning, outOfScopeLinks, and limitations. Do not apply a deepest-path override rule or claim that outside systems fetch any file.","paidNextStep":"No paid TimeToPost feature resolves or maintains path-scoped llms.txt files.","availability":"guide-only","evidenceUrls":["https://llmstxt.org/"],"evidenceType":"official-documentation","demandConfidence":"low","demandNote":"No measured keyword volume. The need is inferred from uncertainty about where to publish the proposed file; external client discovery and support may vary.","aliases":["ai-visibility-link-relations","ai-visibility-markdown-alternate"],"example":{"input":"{\"pageUrl\":\"https://example.com/docs/api/auth\",\"rootStatus\":{\"url\":\"https://example.com/llms.txt\",\"status\":200,\"contentType\":\"text/markdown\"},\"additionalStatuses\":[{\"url\":\"https://example.com/docs/llms.txt\",\"status\":200,\"contentType\":\"text/markdown\",\"scope\":\"Docs\"}]}","output":"{\"rootFile\":{\"url\":\"https://example.com/llms.txt\",\"status\":200},\"additionalFiles\":[{\"url\":\"https://example.com/docs/llms.txt\",\"scope\":\"Docs\",\"status\":200}],\"documentedScope\":\"Docs and site-wide\",\"recommendedFile\":\"https://example.com/docs/llms.txt\",\"reasoning\":\"The page sits under Docs and the site explicitly publishes a Docs-scoped file.\",\"outOfScopeLinks\":[],\"limitations\":[\"Discovery behavior in external clients is not guaranteed\"]}","check":"The output distinguishes the root file from the Docs-scoped file and avoids claiming any universal deepest-path precedence rule. It stays within the provided statuses and scope labels, with a cautious recommendation based on the documented Docs file."}},{"id":"ai-visibility-llms-links","query":"Which llms.txt links are broken, redirected or unnecessarily large?","primaryKeyword":"llms.txt link audit","relatedQueries":["broken llms.txt links","audit llms.txt","Which llms.txt links are broken, redirected or unnecessarily large?"],"category":"AI visibility","audience":"Editors maintaining curated llms.txt indexes","task":"Manually audit the destinations listed in llms.txt and keep the result distinct from citation tracking.","freeAsset":"llms.txt link audit guide","guide":["Extract each Markdown link by section and mark whether its section is required or optional.","Open each URL and record the original URL, redirects, final destination, and observed status; flag errors and loops.","Record the final content type and approximate size as review signals, not automatic rejection criteria.","Prioritize required-section failures and broken links, then recommend fixing, removing, or moving entries to Optional without making citation claims."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Review the manually collected llms.txt link table {{LINK_TABLE}}. Return JSON with links containing sourceAnchor, finalUrl, status, approximateBytes and optional, followed by repairs in priority order. Do not claim any citation effect.","paidNextStep":"No paid TimeToPost plan provides llms.txt link monitoring.","availability":"guide-only","evidenceUrls":["https://llmstxt.org/"],"evidenceType":"hypothesis","demandConfidence":"low","demandNote":"No measured keyword volume. Link maintenance is a practical inference from the curated index format, not an observed demand signal.","aliases":[],"example":{"input":"{\"links\":[{\"sourceAnchor\":\"Guides > Start\",\"url\":\"https://example.com/start\",\"status\":200,\"finalUrl\":\"https://example.com/start\",\"approximateBytes\":18000,\"optional\":false},{\"sourceAnchor\":\"Optional > Archive\",\"url\":\"https://example.com/old\",\"status\":301,\"finalUrl\":\"https://example.com/new\",\"approximateBytes\":420000,\"optional\":true}]}","output":"{\"links\":[{\"sourceAnchor\":\"Guides > Start\",\"finalUrl\":\"https://example.com/start\",\"status\":200,\"approximateBytes\":18000,\"optional\":false},{\"sourceAnchor\":\"Optional > Archive\",\"finalUrl\":\"https://example.com/new\",\"status\":301,\"approximateBytes\":420000,\"optional\":true}],\"repairs\":[{\"sourceAnchor\":\"Optional > Archive\",\"issue\":\"redirects to a new URL\",\"priority\":2}]}","check":"The required link is preserved as a direct 200 response, and the optional archive link is marked as a lower-priority redirect issue. The output remains concrete and does not overstate the impact of the larger file size beyond the supplied data."}},{"id":"ai-visibility-robots-matrix","query":"If robots.txt blocks crawlers, can they still read my llms.txt?","primaryKeyword":"AI crawler robots.txt","relatedQueries":["Googlebot llms.txt","Google-Extended robots","If robots.txt blocks crawlers, can they still read my llms.txt?","Does a non-browser crawler receive my page or a firewall challenge?"],"category":"AI visibility","audience":"Site owners managing crawl and training controls","task":"Separate Googlebot, Google-Extended and wildcard robots.txt rules for llms.txt and its linked pages.","freeAsset":"Crawler access guide","guide":["Fetch the root robots.txt as raw text and verify that the response is not an HTML error page.","List every exact path to test, including /llms.txt and only the pages explicitly in scope.","Evaluate Googlebot, Google-Extended, and wildcard groups separately for each path; record ambiguous matching without guessing.","Report the observed rules narrowly because crawler directives do not prove how every user-triggered assistant will behave."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Parse this copied robots.txt locally: {{ROBOTS_TXT}} for these paths {{PATHS}}. Return JSON with groups and a matrix for Googlebot, Google-Extended and wildcard. State that user-triggered assistants may behave differently and do not claim universal enforcement.","paidNextStep":"No paid TimeToPost plan changes or monitors robots.txt access controls.","availability":"guide-only","evidenceUrls":["https://llmstxt.org/","https://developers.google.com/search/docs/appearance/ai-features","https://www.reddit.com/r/aeo/comments/1vsr4er/we_blocked_a_page_in_robotstxt_then_asked_8_ai/"],"evidenceType":"official-documentation","demandConfidence":"medium","demandNote":"No measured keyword volume. Official guidance distinguishes Search crawl control from other controls, and one small discussion test reports inconsistent user-triggered fetching.","aliases":["ai-visibility-firewall-fetch"],"example":{"input":"{\"robotsTxt\":\"User-agent: Googlebot\\nAllow: /llms.txt\\n\\nUser-agent: Google-Extended\\nDisallow: /llms.txt\",\"paths\":[\"/llms.txt\",\"/docs/start.md\"]}","output":"{\"groups\":[\"Googlebot\",\"Google-Extended\",\"*\"],\"matrix\":[{\"path\":\"/llms.txt\",\"Googlebot\":\"allow\",\"Google-Extended\":\"disallow\",\"*\":\"unknown\"},{\"path\":\"/docs/start.md\",\"Googlebot\":\"unknown\",\"Google-Extended\":\"unknown\",\"*\":\"unknown\"}],\"summary\":\"Googlebot may fetch /llms.txt, while Google-Extended is blocked by the supplied rules.\"}","check":"The matrix separates Googlebot from Google-Extended and does not generalize to all crawlers. It stays strictly within the provided robots.txt rules and avoids unsupported claims about assistant behavior or universal access."}},{"id":"ai-visibility-raw-text","query":"What article text exists before JavaScript runs?","primaryKeyword":"raw HTML text","relatedQueries":["JavaScript content check","crawler text extractor","What article text exists before JavaScript runs?","Is my JSON-LD in the initial HTML or inserted after load?","Which structured-data claims are missing from the visible page?"],"category":"AI visibility","audience":"Teams publishing client-rendered content","task":"Compare raw response text with the rendered page and identify a thin application shell.","freeAsset":"Raw text comparison guide","guide":["Save the initial HTML response without executing scripts and note whether JavaScript is needed for the main content.","Extract the title, H1, headings, and readable article text while excluding scripts, styles, menus, and navigation.","Compare the raw response with the rendered page and report missing headings, passages, and approximate word-count differences.","If critical content is absent initially, recommend a specific remedy such as server rendering, static rendering, or including the copy in the initial HTML."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Compare the user-supplied raw HTML and rendered-page text locally: {{RAW_AND_RENDERED_TEXT}}. Return JSON with rawTitle, rawHeadings, approximateRawWordCount, renderedHeadings, approximateRenderedWordCount, missingPassages, classification, remediationOptions, and limitations. Do not claim to fetch the URL, impose a minimum word threshold, or guarantee search or citation outcomes.","paidNextStep":"Growth includes AutoSEO drafts once per week. It does not guarantee server rendering or AI citations.","availability":"guide-only","evidenceUrls":["https://developers.google.com/search/docs/appearance/ai-features","https://llmstxt.org/","https://www.reddit.com/r/SEO/comments/1tc550w/we_opensourced_the_markdown_spec_we_built_after/","https://www.reddit.com/r/TechSEO/comments/1vdmnwp/i_tested_11_recent_sites_with_four_ai_crawler/"],"evidenceType":"official-documentation","demandConfidence":"medium","demandNote":"No measured keyword volume. Official guidance recommends textual availability, and discussion excerpts describe hydrated or thin raw HTML.","aliases":["ai-visibility-jsonld-source","ai-visibility-schema-consistency"],"example":{"input":"{\"rawHtml\":\"<html><head><title>Pricing</title></head><body><div id=app></div></body></html>\",\"renderedText\":\"Pricing\\nPlans start at $29 per month\\nIncludes email support\"}","output":"Raw document title: Pricing\nRaw body text: none\nRaw body word count: 0\nRendered text word count: 10\nText present only in the rendered version:\n- Plans start at $29 per month\n- Includes email support\nClassification: thin client-rendered shell\nPossible remediation: include the core pricing copy in the server-delivered HTML.","check":"The raw body contains only an empty div, so its visible body word count is zero. The rendered text contains 10 tokens when Pricing and the two supplied lines are counted."}},{"id":"ai-visibility-faq-shape","query":"Should this page use FAQPage or QAPage markup?","primaryKeyword":"FAQPage vs QAPage","relatedQueries":["FAQ schema type","QAPage markup","Should this page use FAQPage or QAPage markup?","How can I exclude one section from snippets without removing the page from search?","Why is old text still showing after I added a snippet control?"],"category":"AI visibility","audience":"Help-center and public-information editors","task":"Choose the appropriate markup shape and verify that accepted answers are visible.","freeAsset":"FAQ and QAPage markup decision guide","guide":["Identify the visible page model: FAQPage fits multiple publisher-provided question and answer pairs, while QAPage fits one question where users can submit answers.","Select the type based on that visible behavior, not merely the page's appearance.","Verify that each marked-up question and answer is present in readable page content; for QAPage, distinguish accepted and suggested user answers when shown.","Document mismatches and note that valid markup does not guarantee rich results or AI citations."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Analyze this page description and copied question-answer text locally: {{PAGE_CONTENT}}. Return JSON with recommendedType, rationale, visibleQA, jsonLdOnlyAnswers, and limitations. Do not claim rich-result or AI citation eligibility.","paidNextStep":"Growth can create weekly AutoSEO drafts, but it does not guarantee FAQ rich results or AI citations.","availability":"guide-only","evidenceUrls":["https://developers.google.com/search/docs/appearance/structured-data/faqpage","https://developers.google.com/search/docs/appearance/ai-features"],"evidenceType":"official-documentation","demandConfidence":"low","demandNote":"No measured keyword volume. The distinction is documented, but the FAQ documentation was available only as a search excerpt in the research.","aliases":["ai-visibility-snippet-controls","ai-visibility-stale-snippet"],"example":{"input":"{\"pageContent\":{\"questions\":[{\"q\":\"How do refunds work?\",\"a\":\"Refunds take five business days.\"}],\"editorialModel\":\"publisher single answer\"}}","output":"{\"recommendedType\":\"FAQPage\",\"rationale\":\"The publisher supplies one visible answer per question.\",\"visibleQA\":[{\"q\":\"How do refunds work?\",\"a\":\"Refunds take five business days.\"}],\"jsonLdOnlyAnswers\":[],\"limitations\":[\"Markup does not guarantee rich results\"]}","check":"The page has a standard question and a single publisher-provided answer, which fits FAQPage rather than QAPage. The output correctly states the answer is visible and keeps the rich result disclaimer, avoiding unsupported guarantees."}},{"id":"ai-visibility-search-eligibility","query":"What does this URL need to be eligible as a supporting link in search AI features?","primaryKeyword":"AI search eligibility","relatedQueries":["AI Overview eligibility","search snippet eligibility","What does this URL need to be eligible as a supporting link in search AI features?","How can I tell whether search AI features sent traffic instead of ordinary web results?"],"category":"AI visibility","audience":"Site owners evaluating public search eligibility","task":"Review ordinary crawl, index and snippet signals without requiring a special AI file.","freeAsset":"AI search eligibility guide","guide":["Run the free single-page SEO audit as a page-level check, or use raw page evidence if the audit is unavailable.","Verify the Googlebot-specific robots.txt rule without substituting Google-Extended; mark ambiguous access as ambiguous.","Inspect HTML and headers for noindex, nosnippet, max-snippet, and canonical hints, reviewing cross-host canonicals separately.","Confirm the heading and core answer appear in the raw response and present the result as a readiness check, not a guarantee of search or AI visibility."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Review the user-supplied single-page audit output, robots.txt rules, raw HTML, and response headers locally: {{PAGE_EVIDENCE}}. Return JSON with auditFindings, googlebotAccess, indexControls, snippetControls, canonicalReview, meaningfulTextPresent, manualChecks, and limitations. Do not request a gated report, measured rankings, or keyword gaps. State that passing these checks does not guarantee indexing or an AI-feature supporting link.","paidNextStep":"Growth includes weekly AutoSEO drafts. Paid plans do not guarantee indexing, rankings or supporting-link placement.","availability":"guide-only","evidenceUrls":["https://developers.google.com/search/docs/appearance/ai-features","https://dev.to/thefron/i-shipped-llmstxt-json-ld-and-ai-crawler-allowances-heres-what-each-one-actually-does-1i75"],"evidenceType":"official-documentation","demandConfidence":"medium","demandNote":"No measured keyword volume. Official guidance directly states that ordinary indexing and snippet eligibility apply and no additional technical requirement exists.","aliases":["ai-visibility-traffic-measurement"],"example":{"input":"{\"auditScore\":82,\"robotsTxt\":{\"googlebot\":\"allowed\"},\"headers\":{\"x-robots-tag\":\"index,follow\"},\"rawHtml\":\"<h1>Guide</h1><p>Core answer text.</p>\"}","output":"{\"auditFindings\":[\"page check score 82\"],\"googlebotAccess\":\"allowed\",\"indexControls\":[\"index,follow\"],\"snippetControls\":[],\"canonicalReview\":\"none\",\"meaningfulTextPresent\":true,\"manualChecks\":[\"confirm page stays live\"],\"limitations\":[\"Passing does not guarantee AI-feature placement\"]}","check":"The output confirms ordinary eligibility signals without promising placement in any AI feature. It remains grounded in the supplied score, access rules, and visible text, while keeping the non-guarantee limitation explicit."}},{"id":"mcp-connect-remote-server","query":"How do I connect my assistant to the TimeToPost MCP server?","primaryKeyword":"connect MCP server","relatedQueries":["remote MCP setup","MCP OAuth login","OAuth discovery failed","MCP invalid grant","How do I connect my assistant to the TimeToPost MCP server?","What should I check when my MCP client says OAuth discovery failed?","Why did MCP login fail with invalid_grant after I approved it?"],"category":"AI agents and MCP","audience":"Marketers using an MCP-compatible assistant","task":"Connect the authenticated remote MCP endpoint, verify the login flow, and recover safely from common authorization failures.","freeAsset":"MCP connection guide","guide":["Add https://api.timetopost.co/mcp as a remote MCP server in the client.","Complete the browser OAuth flow without sharing API keys, tokens, authorization codes, or PKCE verifiers.","Call whoami to confirm the account and organization, then call get_capabilities to inspect available capabilities.","If connection fails, recreate the server entry and start a fresh login; record the client, timestamp, endpoint, and sanitized error if it persists."],"toolUrl":null,"mcpTools":["whoami","get_capabilities","list_free_tools"],"mcpPrompt":"Connect to https://api.timetopost.co/mcp using the client's browser OAuth flow. Call whoami, then get_capabilities, then list_free_tools. Return JSON only as {account:{label,organization}, capabilities:[string], freeTools:[{name,slug}]}. Do not call any mutation, scheduling, approval, publishing, or retry tool. If discovery fails, return a safe diagnostic summary and do not request tokens or codes.","paidNextStep":"Paid scheduling and analytics capabilities depend on the authenticated account and the capabilities returned by get_capabilities. Confirm backend plan eligibility before any paid action, and use the same fresh OAuth flow if the connection must be rebuilt.","availability":"available","evidenceUrls":["https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization","https://stackoverflow.blog/2026/01/21/is-that-allowed-authentication-and-authorization-in-model-context-protocol/"],"evidenceType":"official-documentation","demandConfidence":"medium","demandNote":"No measured keyword volume. Public install discussions show URL-based remote MCP connections, while protocol documentation establishes browser authorization and authenticated tool discovery.","aliases":["mcp-troubleshoot-oauth-discovery","mcp-recover-invalid-grant"],"example":{"input":"Illustrative data only. Client error text: OAuth discovery failed after adding https://api.timetopost.co/mcp, and the browser consent page never opened.","output":"Illustrative assistant summary: The connection did not complete, so no account details are available. Re-add the exact endpoint https://api.timetopost.co/mcp, remove the saved server entry, and retry a fresh browser OAuth flow. Do not reuse an expired code or share secrets in chat. If discovery still fails, verify the server is reachable before attempting login again.","check":"This is clearly labeled illustrative and does not pretend to be an exact API response. It avoids inventing account metadata or a successful login, and it recommends a fresh connection attempt rather than reusing an expired authorization code."}},{"id":"mcp-find-real-tool-names","query":"How can I see the real MCP tool names instead of asking the model to guess?","primaryKeyword":"MCP tool list","relatedQueries":["available MCP tools","wrong tool name","MCP insufficient scope","MCP tool selection","I'm logged in, so why is an MCP tool still forbidden?","How can I see the real MCP tool names instead of asking the model to guess?","How do I keep an MCP marketing workflow from loading or calling unnecessary tools?"],"category":"AI agents and MCP","audience":"People writing reliable prompts for TimeToPost","task":"Discover authenticated capabilities, distinguish authentication from authorization, and keep each workflow limited to the smallest useful tool set.","freeAsset":"Verified tool catalog guide","guide":["Call whoami to confirm the authenticated account and organization.","Call get_capabilities and preserve every returned capability name exactly.","When available, use list_free_tools for public tools and list_integrations for connection types.","Treat 401 as missing or invalid authentication and 403 as insufficient permission; use only the capabilities authorized for the current account."],"toolUrl":null,"mcpTools":["whoami","get_capabilities","list_free_tools","list_integrations"],"mcpPrompt":"Call whoami, get_capabilities, list_free_tools, and list_integrations. Return JSON as {organization:string, capabilities:[string], freeTools:[string], integrations:[string], authState:string, authorizationState:string, minimalTools:[string]}. Preserve exact returned names. Do not infer, rename, invent, or call any mutation tool.","paidNextStep":"Paid functionality is account-specific. Use get_capabilities and the backend plan check to determine which scheduling, AI, or analytics actions are available, and keep the active tool set minimal for the task.","availability":"available","evidenceUrls":["https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization","https://modelcontextprotocol.io/docs/concepts/tools","https://www.reddit.com/r/GithubCopilot/comments/1kmd5nl/where_to_find_list_of_tools_available_to_agent/","https://www.reddit.com/r/mcp/comments/1u1gy61/mcp_connector_v014_and_015_adaptive_tool_loading/"],"evidenceType":"official-documentation","demandConfidence":"medium","demandNote":"No measured keyword volume. Protocol documentation explicitly distinguishes authentication and authorization failures, and public discussions report tool discovery and context overhead problems.","aliases":["mcp-check-scopes-and-permissions","mcp-use-small-tool-set"],"example":{"input":"Synthetic example: The client currently displays only one MCP tool name: list_free_tools. The user wants to call seo_audit.","output":"The only confirmed tool name is list_free_tools. Run that discovery tool and inspect its returned names and permission information. Do not call seo_audit unless that exact name appears in the discovery result and is available to the current session.","check":"The answer uses only the tool name shown in the input. It does not invent discovery tools, account details, permissions, or capabilities."}},{"id":"mcp-audit-one-web-page","query":"Can my assistant audit one page for basic SEO and GEO issues?","primaryKeyword":"SEO page audit","relatedQueries":["technical SEO check","GEO page audit","keyword snapshot","GEO visibility check","Can my assistant audit one page for basic SEO and GEO issues?","Can my assistant give me directional keyword ideas without claiming exact search volume?","Can my assistant check whether one AI model mentions my brand?"],"category":"AI agents and MCP","audience":"Content marketers checking a specific public page","task":"Run deterministic single-page checks, retrieve directional keyword ideas, or inspect one model probe for brand visibility without overstating the result.","freeAsset":"SEO and GEO audit","guide":["Provide one public page URL for a single-page audit, one seed phrase for a keyword snapshot, or one brand prompt for a GEO visibility check.","Use the returned fields as labeled and do not present a page audit as a crawl, a keyword band as measured volume, or one model probe as citation ranking.","Map each reported issue or idea to one specific page edit or content choice.","For GEO checks, record the exact prompt, brand, and source label; for keyword checks, state when exact volume, difficulty, CPC, and trends are not included."],"toolUrl":"https://timetopost.co/tools/seo-audit/","mcpTools":["seo_audit","keyword_snapshot","geo_visibility_check"],"mcpPrompt":"Use the appropriate tool for <public_page_url> or <seed_keyword> or <exact_brand_name and exact_question>. Return JSON as {mode:string, input:string, outputSummary:object, limitations:[string], topAction:string}. State clearly whether the result is a single-page technical audit, directional keyword snapshot, or one model probe. Do not claim a crawl, ranking report, or measured market share.","paidNextStep":"The gated SEO report may expand the scope, and the keyword or GEO flows may return richer details when available. Use only the data each tool actually provides, and confirm backend capability before asking for any paid follow-up.","availability":"available","evidenceUrls":["https://www.reddit.com/r/BestGitHubRepos/comments/1wm7ee9/seomonster_a_local_mcp_server_that_turns_seo_work/","https://www.reddit.com/r/Agentic_SEO/comments/1v2hxxa/built_an_mcp_server_that_connects_claude_to/"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. Public SEO-agent posts repeatedly ask what to write next and whether a brand appears, but the available TimeToPost functions are limited to one page, one seed phrase, or one probe.","aliases":["mcp-get-keyword-snapshot","mcp-check-brand-geo-visibility"],"example":{"input":"Synthetic page data: URL https://example.com/article. HTML head: <title>Remote Team Content Calendar</title>. HTML body: <h1>Remote Team Content Calendar</h1><p>A shared calendar helps remote teams coordinate publication dates.</p>. No meta description is present.","output":"Page: https://example.com/article\nTitle: Remote Team Content Calendar\nH1: Remote Team Content Calendar\nMeta description: missing\nVisible supporting text: A shared calendar helps remote teams coordinate publication dates.\nRecommended action: add a concise meta description based on the visible page text.","check":"Every finding comes directly from the supplied synthetic HTML. The output does not invent a score, ranking, traffic estimate, full-site crawl result, or external tool capability."}},{"id":"mcp-get-public-posting-time","query":"What is a reasonable public best time to post before I have account analytics?","primaryKeyword":"best time to post","relatedQueries":["posting time calculator","social posting hours","optimal posting times","engagement comparison","post performance analysis","What is a reasonable public best time to post before I have account analytics?","Can my assistant find posting times from my connected account data?","How can I compare recent engagement with the previous period using my connected data?","Which of my posts performed best without relying on generic advice?"],"category":"AI agents and MCP","audience":"Marketers without enough account-specific engagement history","task":"Retrieve a source-labeled public timing curve, compare it with connected account analytics when available, and use actual metrics to validate the recommendation.","freeAsset":"Best Time to Post calculator","guide":["Choose the supported platform and an IANA timezone. Use the public, source-labeled aggregate baseline when account analytics are unavailable.","For connected analytics, call whoami and get_capabilities first. Use get_optimal_times only when returned with the required scopes and data.","Compare equal date ranges using only returned fields. For post-level analysis, rank listed posts by one stated metric.","Convert future times with a date-aware IANA timezone tool, verify daylight saving behavior, and do not present recommendations as guaranteed results."],"toolUrl":"https://timetopost.co/tools/best-time-to-post-calculator/","mcpTools":["best_time_teaser","whoami","get_capabilities","get_optimal_times","get_engagement_summary","list_posts","get_post_metrics","get_post"],"mcpPrompt":"Use best_time_teaser for <platform_context> and <timezone> when you need the public baseline. If connected account analytics are requested, call whoami and get_capabilities first, then only call get_optimal_times, get_engagement_summary, list_posts, get_post_metrics, or get_post when those exact capabilities are returned and the account has the required scopes and data. Return JSON as {mode:string, account:string, timezone:string, candidateWindows:[object], comparisons:[object], rankedPosts:[object], limitations:[string]}. Do not promise personalized results when prerequisites are missing, and do not schedule, publish, approve, or mutate anything.","paidNextStep":"A downloadable calendar may be available through the gated flow, but future event times must be verified with date-aware IANA timezone conversion because the current calculator uses a current-date offset. Account analytics require the relevant connection, scopes, data, capability, and backend plan eligibility, and scheduling remains a separate explicit action.","availability":"available","evidenceUrls":["https://www.reddit.com/r/AgentsOfAI/comments/1wn6u20/i_was_tired_of_generic_x_advice_so_i_gave_my/"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. A public discussion contrasts generic posting-time advice with account-specific performance, supporting use of a public curve only as a starting point.","aliases":["mcp-review-account-optimal-times","mcp-compare-engagement-periods","mcp-analyze-post-metrics"],"example":{"input":"Synthetic planning data: Platform X, timezone America/New_York, test week 2026-09-01 to 2026-09-07, metric impressions, and no account analytics or cited benchmark data.","output":"No evidence-backed best time can be selected from the supplied data. For a concrete initial test, compare two labeled test slots: 2026-09-01 10:00 America/New_York and 2026-09-03 10:00 America/New_York. Compare impressions only after using comparable posts and observation periods.","check":"The two times are test conditions, not claimed industry best times. The output uses the supplied impressions metric and does not invent account analytics, benchmark studies, or guaranteed performance."}},{"id":"mcp-create-reviewable-drafts","query":"Can my assistant create social drafts without scheduling or publishing them?","primaryKeyword":"AI social drafts","relatedQueries":["draft for approval","no autopublish workflow","pending social drafts","source based social draft","draft review queue","Can my assistant create social drafts without scheduling or publishing them?","How can I review pending drafts without letting the assistant approve them?","Can my assistant turn one source URL into drafts while keeping them unpublished?"],"category":"AI agents and MCP","audience":"Editors who want assistance writing but retain publication control","task":"Create draft records from a brief or source, then keep them in a human review queue without changing status.","freeAsset":"Draft-only workflow guide","guide":["Prepare the topic, audience, factual inputs, prohibited claims, desired length, and any source URL.","Call whoami and get_capabilities, show the organization, and obtain explicit confirmation before creating records.","After confirmation, use create_drafts or create_posts_from_source and keep every result in draft status.","Verify with list_drafts, then return drafts for human review. Do not call approve_draft, reject_draft, schedule_post, publish_post, or publish_thread."],"toolUrl":null,"mcpTools":["whoami","get_capabilities","create_drafts","list_drafts","create_posts_from_source","get_source_status","get_post"],"mcpPrompt":"First call whoami, then get_capabilities. Show the organization and require explicit confirmation that it equals <organization_name>. After confirmation, use create_drafts with brief {topic:<topic>, audience:<audience>, facts:<verified_facts>, prohibitedClaims:<claims>, channel:'X', count:<count>} or use create_posts_from_source with {sourceUrl:<url>, audience:<audience>, channel:'X', count:<count>, outputMode:'draft'}. Then verify with list_drafts and, if needed, get_source_status. Return JSON as {organization:string, source:string, drafts:[{id,text,status,sourceSupported:boolean,unsupportedClaims:[string]}], approved:false, scheduled:false, published:false}. Do not approve, reject, schedule, or publish.","paidNextStep":"Draft creation requires the returned capability and backend plan eligibility. Keep drafts unapproved, unscheduled, and unpublished until a separate human-confirmed action. Public publishing support is X only.","availability":"guide-only","evidenceUrls":["https://community.n8n.io/t/draft-approve-google-sheets-gpt-draft-slack-approve-reject-human-still-posts/310875","https://www.reddit.com/r/AI_Agents/comments/1uy2g3y/the_3_levels_i_let_ai_touch_a_task_most_people/"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. The supplied sources describe concrete draft queues and recommend placing a human gate immediately before consequential actions.","aliases":["mcp-review-draft-queue","mcp-create-drafts-from-source"],"example":{"input":"Synthetic source excerpt: \"Remote collaboration is easier when teams document decisions, assign owners, and record deadlines in a shared workspace.\" Write two X drafts and include https://example.com/article.","output":"Draft 1: Remote collaboration is easier when teams document decisions and assign clear owners. https://example.com/article\n\nDraft 2: A shared workspace can help distributed teams record decisions, owners, and deadlines. https://example.com/article","check":"Both drafts are concrete and use only claims from the synthetic source excerpt. They contain the supplied URL and do not claim approval, scheduling, publication, or performance."}},{"id":"mcp-prepare-x-schedule-receipt","query":"How do I prepare an X scheduling receipt before anything is queued?","primaryKeyword":"X schedule receipt","relatedQueries":["review before scheduling","social scheduling checklist","avoid duplicate posts","publishing retry check","social post status","How do I prepare an X scheduling receipt before anything is queued?","How do I avoid duplicate X posts after a scheduling or publishing error?"],"category":"AI agents and MCP","audience":"Teams that want a final check before scheduling an X post","task":"Assemble a read-only receipt containing the intended account, final text, media, and time, then verify whether a duplicate already exists before deciding on any retry.","freeAsset":"X scheduling checklist","guide":["Call whoami and get_capabilities, then confirm the organization, account, and returned X scheduling capability.","Read the selected draft with list_drafts and get_post without changing it, and note existing media identifiers.","Manually check the organization, account, final text, media IDs, IANA timezone, and scheduled timestamp against the original instruction. Record any human approval or deadline outside the API workflow.","If a prior result is uncertain, check scheduler_status and list_posts for a matching text fingerprint and time window. Do not call schedule_post or retry automatically."],"toolUrl":null,"mcpTools":["whoami","get_capabilities","list_drafts","get_post","scheduler_status","list_posts"],"mcpPrompt":"Call whoami, then get_capabilities, and confirm organization <organization_name>. Read draft <draft_id> and scheduler_status for the intended X account <account_id>. Check list_posts for account <account_id>, text fingerprint <text_or_hash>, and window <start/end>. Return JSON as {organization:string, account:string, network:'X', draftId:string, finalText:string, mediaIds:[string], scheduledAt:<ISO8601>, timezone:string, matchingJobs:[object], matchingPosts:[object], mismatches:[string], readyForHumanDecision:boolean}. Do not upload, approve, schedule, publish, retry, or mutate anything.","paidNextStep":"Starter at $12 per month supports up to 30 X posts, and Pro at $49.99 per month includes unlimited scheduling. Scheduling or a retry must remain a separate explicit action after the read-back shows no duplicate and the human confirms the receipt.","availability":"available","evidenceUrls":["https://www.reddit.com/r/AI_Agents/comments/1va08fz/best_way_to_schedule_social_media_posts_from/","https://modelcontextprotocol.io/docs/concepts/tools"],"evidenceType":"observed-discussion","demandConfidence":"low","demandNote":"No measured keyword volume. Visible comments on a removed scheduling thread specify receipt fields and mismatch gates, but the original post was unavailable.","aliases":["mcp-check-before-publish-retry"],"example":{"input":"Illustrative data only. Draft draft_44 says: 'Launch day is here.' The intended account is acct_9, timezone is America/Los_Angeles, and the scheduler previously returned an uncertain status.","output":"Illustrative assistant summary: read only receipt for draft_44 on acct_9 in America/Los_Angeles. Final text is \"Launch day is here.\" The previous scheduler status is uncertain, so this receipt only records a human decision checkpoint. No scheduling, retry, or queue placement is performed here.","check":"The output should be read only, should surface the uncertain existing job, and should not schedule, timestamp, or retry automatically."}},{"id":"analytics-engagement-rate-definitions","query":"Which engagement rate should I report when I have followers and impressions?","primaryKeyword":"engagement rate formula","relatedQueries":["engagement by followers","engagement by impressions","One post went viral. How do I calculate the engagement rate of a typical post?","Which of two creators has the stronger engagement rate using the same formula?","Should I calculate engagement separately for still posts and short videos?","Which engagement rate should I report when I have followers and impressions?"],"category":"Analytics and conversion","audience":"Creators and sponsors comparing different engagement formulas","task":"Calculate and label follower-based and impression-based rates from user-supplied metrics without selecting a universal benchmark.","freeAsset":"Engagement definition calculator","guide":["Supply the metrics because the calculator does not retrieve platform data, and choose a consistent engagement numerator.","Create separate followers-based and impressions-based batches with the correct denominator and basis for every row. Do not mix bases in one call.","Use MCP for batches of up to 100 posts; the web calculator handles one post at a time.","Compare perPost, medianRate, and aggregateRate while labeling each numerator and denominator. Do not select a formula because it produces a larger rate."],"toolUrl":"/tools/engagement-rate-calculator/","mcpTools":["calculate_engagement"],"mcpPrompt":"After I approve both user-supplied arrays, call calculate_engagement separately with {\"posts\":{{followers_posts_json}}} and {\"posts\":{{impressions_posts_json}}}. The first array must use basis followers and the second basis impressions, with the same disclosed engagement metrics where possible. Return and label each call's perPost, medianRate, and aggregateRate. State that no platform data was retrieved. Do not post, select a universal formula, or add benchmarks.","paidNextStep":"Pro analytics and get_post_metrics can support a consistent connected-X reporting workflow when the account exposes the required fields.","availability":"available","evidenceUrls":["https://www.reddit.com/r/SideProject/comments/1rgu79r/i_built_a_free_instagram_engagement_rate/","https://www.reddit.com/r/branddeals/comments/1okw4ax/how_to_charge_for_brand_deals/","https://docs.x.com/x-api/posts/post-lookup-by-post-id"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. Discussions use different numerators, while official documentation distinguishes metric groups, showing why the formula must be labeled.","aliases":["analytics-median-engagement-rate","analytics-creator-engagement-comparison","analytics-engagement-by-format"],"example":{"input":"Two user-supplied posts. Row 1: followers 12500, likes 420, comments 35, shares 10, saves 5, basis followers. Row 2: followers 12500, likes 210, comments 20, shares 6, saves 4, basis followers.","output":"Follower-based results only: row 1 engagement total is 470, so the rate is 3.76 percent. Row 2 engagement total is 240, so the rate is 1.92 percent. The median row rate is 2.84 percent, and the aggregate follower-based rate is also 2.84 percent because 710 total engagements divided by 25000 followers equals 2.84 percent. No impression-based result is provided because no impressions were supplied.","check":"Confirm both rows use the same follower basis, the per-row math is correct, the median for the two row rates is their average, and no unsupported impression-based claim is added."}},{"id":"analytics-sponsor-quote-calculator","query":"What sponsorship quote should I calculate from my followers and my own price per thousand?","primaryKeyword":"sponsorship quote calculator","relatedQueries":["creator rate formula","sponsored post quote","What sponsorship quote should I calculate from my followers and my own price per thousand?"],"category":"Analytics and conversion","audience":"Creators preparing a quote for one sponsored post","task":"Calculate a base quote and an engagement-adjusted quote using only user-supplied pricing assumptions.","freeAsset":"Sponsor quote worked example","guide":["Enter followers and your assumed price per 1,000 followers. For 18,000 followers at $20, the base is $360.","Calculate engagement as (likes + comments + shares) divided by followers times 100.","Define nonoverlapping editable uplift bands before calculating, such as at least 0 but below 2 percent adding 0 percent, at least 2 through 4 percent adding 10 percent, and above 4 percent adding 20 percent.","Multiply the base by 1 plus the selected uplift, and label every band as a user assumption rather than a market rate."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Calculate a sponsor quote from {{followers}}, {{price_per_thousand}}, {{likes}}, {{comments}}, {{shares}}, and editable bands {{bands_json}}. Return JSON with base_quote, engagement_rate, matched_band, uplift_percent, adjusted_quote, currency, and assumption_notice. Do not invent pricing bands or market benchmarks.","paidNextStep":"If the backend confirms eligibility, an approved X announcement may be scheduled separately. This worksheet does not establish market pricing or recommend a sponsorship rate.","availability":"guide-only","evidenceUrls":["https://www.reddit.com/r/branddeals/comments/1okw4ax/how_to_charge_for_brand_deals/"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. A discussion provides the two-step arithmetic, but its dollar multipliers are community advice rather than validated rates.","aliases":[],"example":{"input":"followers 18000, price_per_thousand 20, likes 900, comments 60, shares 40, bands at least 0 but below 2 percent add 0 percent; at least 2 through 4 percent add 10 percent; above 4 percent add 20 percent.","output":"Base quote is 360.00 USD because 18000 followers divided by 1000 equals 18, and 18 times 20 equals 360.00. Engagement total is 1000, so engagement rate is 5.56 percent because 1000 divided by 18000 times 100 equals 5.56. The matched band is above 4 percent, uplift percent is 20, and the adjusted quote is 432.00 USD.","check":"Verify the base quote formula uses followers per 1000 times the supplied price, the engagement rate uses only the provided counts, and the band rules are explicitly user-defined."}},{"id":"analytics-batch-utm-links","query":"How do I create tagged links for the same campaign across several sites?","primaryKeyword":"batch UTM links","relatedQueries":["campaign URL generator","social UTM links","newsletter UTM tags","utm content per post","content format UTM","How do I create tagged links for the same campaign across several sites?","What tags should I add so newsletter clicks do not look like direct traffic?","Should separate social posts share one campaign and use content tags for each post?","How do I distinguish two links in the same message when both go to one page?","How do I give each article derivative its own tagged link?"],"category":"Analytics and conversion","audience":"Small businesses and indie launches sharing one offer across channels","task":"Create one campaign URL per user-supplied source while keeping campaign and medium consistent.","freeAsset":"Batch campaign URL builder","guide":["Prepare up to 20 records with an HTTP or HTTPS landing URL, source, medium, campaign, and optional term and content.","Apply the approved medium and campaign consistently while changing source where needed. Review spelling and capitalization because lowercase is not automatically required.","Run the builder. It preserves nonconflicting query parameters and fragments, performs no network fetch, and rejects credential-bearing or non-HTTP URLs.","Verify each tagged URL and test destinations separately because local destination availability is not checked."],"toolUrl":"/tools/campaign-link-builder/","mcpTools":["build_campaign_urls"],"mcpPrompt":"After I approve the complete records array, call build_campaign_urls with {\"records\":{{records_json}}}. Each of up to 20 records must contain url, source, medium, and campaign, with optional term and content. Return the generated URLs and any validation refusal. Preserve user-approved capitalization. Explain that existing query parameters and fragments are preserved, no destination was fetched, and nothing was posted or scheduled.","paidNextStep":"After confirming the organization and draft, Starter can schedule an approved X post containing the X-specific tagged URL.","availability":"available","evidenceUrls":["https://support.google.com/analytics/answer/10917952?hl=en","https://www.reddit.com/r/gamedev/comments/15bqs0o/indie_game_devs_your_practical_steam_utm_guide/"],"evidenceType":"official-documentation","demandConfidence":"medium","demandNote":"No measured keyword volume. Official documentation specifies the parameters and a discussion provides a worked social use case; the batch wrapper is a hypothesis.","aliases":["analytics-newsletter-utm-links","analytics-post-content-utm","analytics-two-link-content-test","analytics-derivative-format-tags"],"example":{"input":"Two records. Record 1 url https://example.com/offer?ref=home, source x, medium social, campaign spring-sale, content thread-a. Record 2 url https://example.com/offer?ref=home, source newsletter, medium email, campaign spring-sale, content hero-top.","output":"Record 1 becomes https://example.com/offer?ref=home&utm_source=x&utm_medium=social&utm_campaign=spring-sale&utm_content=thread-a. Record 2 becomes https://example.com/offer?ref=home&utm_source=newsletter&utm_medium=email&utm_campaign=spring-sale&utm_content=hero-top. The original ref=home parameter stays intact in both URLs.","check":"Confirm both records share the same campaign, each source and medium match the intended channel, and the original ref parameter remains unchanged."}},{"id":"analytics-utm-naming-linter","query":"Can I check campaign links for inconsistent source names and capitalization?","primaryKeyword":"UTM naming checker","relatedQueries":["UTM consistency","campaign link audit","required UTM parameters","Can I check campaign links for inconsistent source names and capitalization?","Which campaign parameters are missing from my tagged link?"],"category":"Analytics and conversion","audience":"Founders and freelancers tagging links manually","task":"Lint pasted campaign URLs for missing fields, mixed case, spaces, and user-defined naming inconsistencies.","freeAsset":"UTM lint guide","guide":["Paste the URLs and define allowed source and medium values, such as x and organic_social.","Check each URL for utm_source, utm_medium, and utm_campaign. Treat uppercase as a naming-convention issue when lowercase is your standard, not as an invalid protocol.","Flag unencoded spaces, disallowed values, and near-duplicate names used for the same source.","Propose corrections while preserving the destination path and non-UTM parameters, then review every replacement."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Lint URLs {{urls_json}} against allowed_sources {{allowed_sources_json}} and allowed_mediums {{allowed_mediums_json}}. Return JSON issues with url, code, parameter, current_value, suggested_value, and corrected_url. Preserve destination paths and non-UTM parameters. Do not publish.","paidNextStep":"For an X draft, an authenticated MCP workflow can call whoami, get_capabilities, confirm the organization, create a draft, and leave it unapproved for review.","availability":"guide-only","evidenceUrls":["https://support.google.com/analytics/answer/10917952?hl=en","https://www.reddit.com/r/digital_marketing/comments/1ov6ln6/utm_parameters_explained_for_a_newbie/"],"evidenceType":"official-documentation","demandConfidence":"medium","demandNote":"No measured keyword volume. Official guidance confirms case sensitivity, and a discussion describes fragmented reporting from inconsistent source names.","aliases":["analytics-required-utm-check"],"example":{"input":"URL https://example.com/landing?utm_source=X&utm_medium=social&utm_campaign=Spring Sale and allowed source x, allowed medium social.","output":"Issues: utm_source uses uppercase X instead of the allowed lowercase x, and utm_campaign contains an unencoded space in Spring Sale. A corrected URL would keep the same destination path and use https://example.com/landing?utm_source=x&utm_medium=social&utm_campaign=Spring%20Sale.","check":"Verify the report flags case sensitivity and encoding problems, and that the corrected URL preserves the destination path and does not invent any other changes."}},{"id":"analytics-utm-redirect-diff","query":"Which campaign parameters disappeared after my link redirected?","primaryKeyword":"UTM redirect checker","relatedQueries":["lost UTM parameters","campaign URL redirect","Which campaign parameters disappeared after my link redirected?"],"category":"Analytics and conversion","audience":"People checking links opened through shorteners or in-app browsers","task":"Compare a planned URL with the final address copied after a real click.","freeAsset":"UTM redirect comparison guide","guide":["Copy the exact planned URL from the post or message before opening it.","Open it in the target environment, allow the redirect chain to finish, and copy the final address-bar URL.","Compare UTM parameters and classify each as kept, lost, added, or changed. A planned utm_source=x missing from the final URL is lost.","Correct the redirect or intermediary that strips or changes the parameter, then retest the original planned URL. Do not claim readding an already present parameter fixes stripping."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Compare planned URL {{planned_url}} with landed URL {{landed_url}}. Return JSON with kept, lost, added, changed entries containing name, planned_value, and landed_value, plus corrected_planned_url. Do not claim that any platform preserves parameters.","paidNextStep":"For connected X content, get_post can retrieve the saved post record for review, while redirect testing still requires the user's final clicked URL.","availability":"guide-only","evidenceUrls":["https://www.reddit.com/r/smallbusiness/comments/1p5afly/how_are_you_handling_your_igtiktok_bio_traffic/","https://docs.x.com/x-api/posts/post-lookup-by-post-id"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. One practitioner discussion reports untagged social traffic appearing direct, while official X documentation describes expanded and unwound URL data.","aliases":[],"example":{"input":"Planned URL https://example.com/page?utm_source=x&utm_medium=social&utm_campaign=spring and landed URL https://example.com/page?utm_medium=social&utm_campaign=spring.","output":"Lost parameter: utm_source. Kept parameters: utm_medium and utm_campaign. The planned URL already contains utm_source=x, so readding it would not fix the loss; the redirect or intermediary must be corrected to preserve that parameter, and the original planned URL must then be retested.","check":"Confirm the lost parameter is identified from the planned URL and not treated as present just because other UTM fields remain."}},{"id":"analytics-profile-link-priority","query":"How should I order a crowded profile link page around one main goal?","primaryKeyword":"profile link order","relatedQueries":["link page priority","profile call to action","profile pin test","profile link spike","How should I order a crowded profile link page around one main goal?","How can I compare a product pin with an email signup pin fairly?","How do I compare a profile-link call to action with a comment-keyword call to action?","What should I change my profile link to while one post is getting attention?"],"category":"Analytics and conversion","audience":"Creators and local businesses with crowded profile link lists","task":"Choose one primary destination and organize remaining links as secondary or overflow.","freeAsset":"Profile link priority guide","guide":["State one current goal with an action verb, such as buy, book, join, or read.","List each link with its label, URL, and direct relevance to that goal.","Choose the shortest path to the goal as primary, select no more than three secondary links, and place the rest in overflow.","Write one profile sentence naming the primary action, and avoid giving every link equally prominent styling."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Given goal {{goal}} and links {{links_json}}, organize them into one primary, up to three secondary, and overflow. Return JSON with primary, secondary, overflow, rationale_per_link, and a profile_sentence under 160 characters. Do not claim to host or edit a profile page.","paidNextStep":"If the backend confirms eligibility, an approved X post may point to the selected primary URL. TimeToPost does not host or edit the external profile page.","availability":"guide-only","evidenceUrls":["https://www.reddit.com/r/SaaS/comments/1r5g8fz/i_analyzed_5_creators_linkinbio_pages_almost_none","https://www.reddit.com/r/smallbusiness/comments/1p5afly/how_are_you_handling_your_igtiktok_bio_traffic/"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. Two discussions describe equal-weight link lists and unclear primary actions, although one review covers only five pages.","aliases":["analytics-profile-pin-test","analytics-cta-path-comparison","analytics-profile-spike-swap"],"example":{"input":"Goal book. Links are homepage, booking page, pricing page, and Instagram DM. Booking page reaches the goal in one step, pricing page supports the goal but is not the final action, homepage is broad, and DM is secondary.","output":"Primary link: booking page. Secondary links: pricing page and Instagram DM. Overflow link: homepage. Profile sentence: Book a 20-minute consultation.","check":"Confirm only one link is primary, the shortest path to the goal wins, and the profile sentence clearly names the main action without adding extra promises."}},{"id":"analytics-article-derivative-pack","query":"Can you turn my article into an X thread, caption, pull quote, and email teaser?","primaryKeyword":"article repurposing","relatedQueries":["blog to X thread","content derivative pack","post performance ranking","Can you turn my article into an X thread, caption, pull quote, and email teaser?","Which past posts are worth rewriting, and which spike was a one-off?"],"category":"Analytics and conversion","audience":"Founders and creators repurposing an existing long-form article","task":"Create distinct derivative drafts and count characters for every X post.","freeAsset":"Article derivative prompt guide","guide":["Paste the article text or provide a source URL, specify the desired X thread length, and extract the central claim, three supporting points, one quote, and one email takeaway.","Draft an X thread in which each post advances the argument, plus a separate caption, pull quote, and email teaser.","Use a simple code-point counter only as an estimate for ordinary text. X weights actual URLs as 23 characters, and emoji grapheme handling may differ.","Validate each post in the official X composer, clearly label longer text instead of silently cutting it, and remove claims unsupported by the source."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Using source text or URL {{source}}, draft locally an X thread of {{x_post_count}} posts plus a caption, pull_quote, and email_teaser. Return JSON with x items containing text and basic_codepoint_count, plus caption, pull_quote, email_teaser, source_claim_checks, and validation_notice. The validation_notice must say the count is not X-weighted, URL weighting is not implemented, emoji graphemes can differ from code points, and every post must be checked in the official X composer. Do not create records, approve, schedule, publish, or send.","paidNextStep":"After human review, eligible X drafts may be created or scheduled only through capabilities returned by get_capabilities and a successful backend plan check. TimeToPost does not import arbitrary pasted article text through AutoSEO; AutoSEO generates configured-topic articles from site configuration.","availability":"guide-only","evidenceUrls":["https://www.reddit.com/r/n8n/comments/1rx58p0/i_built_a_workflow_that_turns_any_blog_post_into/","https://www.reddit.com/r/SaaS/comments/1s8jzsf/how_we_automated_content_repurposing_1_blog_post/","https://www.reddit.com/r/indiehackers/comments/1n4x3xj/how_are_you_all_turning_longform_blogs_into_short/","https://docs.x.com/x-api/posts/post-lookup-by-post-id"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. Several independent discussions describe the same article-to-thread workflow, though many are product-promotion posts; official X documentation confirms long-form note text exists.","aliases":["analytics-repurpose-performance-rank"],"example":{"input":"Synthetic source excerpt: \"In our internal workflow review, teams sent a short email summary every Friday. The summary listed open tasks, assigned owners, and due dates. Team members reported that the list helped them identify pending follow-ups sooner.\" Request a 3-post X thread, one caption, one verbatim pull quote, and one email teaser.","output":"Thread post 1: A short Friday email summary can list open tasks, assigned owners, and due dates.\n\nThread post 2: In the workflow review, team members reported that this list helped them identify pending follow-ups sooner.\n\nThread post 3: Practical format: send one weekly summary covering each open task, its owner, and its due date.\n\nCaption: A simple Friday summary can keep open tasks, owners, and due dates visible to the team.\n\nPull quote: \"Team members reported that the list helped them identify pending follow-ups sooner.\"\n\nEmail teaser: What should a weekly follow-up summary contain? This article describes a Friday format covering open tasks, assigned owners, and due dates.","check":"The thread has exactly three posts. Every factual statement is grounded in the full synthetic excerpt, and the pull quote reproduces one supplied sentence verbatim."}},{"id":"analytics-ad-cost-rates","query":"What are my CPM, CPC, CPA, and CTR from spend, impressions, clicks, and conversions?","primaryKeyword":"CPM CPC CPA calculator","relatedQueries":["ad cost calculator","campaign rate formulas","What are my CPM, CPC, CPA, and CTR from spend, impressions, clicks, and conversions?"],"category":"Analytics and conversion","audience":"Small businesses calculating basic promotion economics","task":"Calculate four standard rates from user-supplied campaign totals.","freeAsset":"Campaign cost worked example","guide":["Enter spend, currency, impressions, clicks, and conversions. Example: $500, 100,000 impressions, 2,000 clicks, and 50 conversions.","Calculate CPM as spend divided by impressions times 1,000 and CTR as clicks divided by impressions times 100. The example gives $5 CPM and 2 percent CTR.","Calculate CPC as spend divided by clicks and CPA as spend divided by conversions. The example gives $0.25 CPC and $10 CPA.","Return null with a denominator-zero explanation when required, and report formulas without invented benchmarks or performance labels."],"toolUrl":null,"mcpTools":[],"mcpPrompt":"Using spend {{spend}}, currency {{currency}}, impressions {{impressions}}, clicks {{clicks}}, and conversions {{conversions}}, return JSON with cpm, cpc, cpa, ctr_percent, formulas, and null_reasons. Use null for zero denominators. Do not add benchmarks.","paidNextStep":"Connected X performance may be reviewed alongside these manually calculated rates only when the account, scopes, returned metrics, capabilities, and backend plan eligibility support it.","availability":"guide-only","evidenceUrls":["https://www.reddit.com/r/programmatic/comments/1pi3q4n/i_built_a_free_privacyfocused_calculator_for_ad"],"evidenceType":"observed-discussion","demandConfidence":"medium","demandNote":"No measured keyword volume. One builder describes repeatedly using spreadsheets for CPM, CPC, and CPA arithmetic; it supports the task but not benchmark demand.","aliases":[],"example":{"input":"spend 500, currency USD, impressions 100000, clicks 2000, conversions 50.","output":"CPM is 5.00 USD because 500 divided by 100000 times 1000 equals 5.00. CPC is 0.25 USD because 500 divided by 2000 equals 0.25. CPA is 10.00 USD because 500 divided by 50 equals 10.00. CTR is 2.00 percent because 2000 divided by 100000 times 100 equals 2.00.","check":"Verify each formula uses the correct denominator and that all four rates are included with no benchmark or comparison language."}}]}