TimeToPost workflow catalog
Social media and marketing workflows
Explore practical workflows for planning, publishing, analysis, and automation. Each entry shows who it is for, what it helps with, where to start, and what to do next.
Some workflows are available in the product today, some are guide-only, and planned entries are labeled plainly. For agent-driven workflows, check account and integration capabilities before any action that creates, schedules, publishes, changes or deletes data.
37 workflows shown
Use-case catalog
Content preparation
Why does X say my post is too long when my document says it is under 280 characters?
For People drafting standard X posts: 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.
Guide only
Content preparation
Why does X say my post is too long when my document says it is under 280 characters?
For People drafting standard X posts: 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.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: A paid TimeToPost plan can schedule or publish a valid standard post to a connected X account.
Review pricingContent preparation
What is the image description limit on X, and does alt text need to stay under 125 characters?
For Editors writing X image descriptions: 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.
Available now
Content preparation
What is the image description limit on X, and does alt text need to stay under 125 characters?
For Editors writing X image descriptions: 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.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: A paid plan can attach confirmed alt text to uploaded media before an X post is published.
Review pricingContent preparation
Should I put hashtags in image alt text when they do not fit in the caption?
For Creators preparing accessible image posts: Separate visual description from discovery hashtags, format multi-word hashtags accessibly, and place overflow tags in the correct visible field.
Guide only
Content preparation
Should I put hashtags in image alt text when they do not fit in the caption?
For Creators preparing accessible image posts: Separate visual description from discovery hashtags, format multi-word hashtags accessibly, and place overflow tags in the correct visible field.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: A paid plan can upload media and publish an X post after the author supplies and confirms the final caption and alt text.
Review pricingContent preparation
How do I describe a chart or map on X without copying the entire dataset?
For Researchers, journalists, and analysts: Write findings-focused alt text for charts and maps, summarize the main takeaway, and keep source details in the visible post.
Guide only
Content preparation
How do I describe a chart or map on X without copying the entire dataset?
For Researchers, journalists, and analysts: Write findings-focused alt text for charts and maps, summarize the main takeaway, and keep source details in the visible post.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: 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.
Review pricingContent preparation
How can I turn an article into X posts that each fit the standard limit?
For Content and SEO writers with an existing article: Create source-grounded X drafts from an article, then optionally repurpose X posts back into a clean blog outline without inventing unsupported claims.
Guide only
Content preparation
How can I turn an article into X posts that each fit the standard limit?
For Content and SEO writers with an existing article: Create source-grounded X drafts from an article, then optionally repurpose X posts back into a clean blog outline without inventing unsupported claims.
Start here: 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.
Try with your AI assistant
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.
Tools: whoami, get_capabilities, create_posts_from_source, get_source_status
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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. Post 2: Facilities sort batteries by chemistry because different battery types require different recovery processes. Post 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.
When you need more: TimeToPost paid plans can retain generated drafts and schedule approved standard posts to X, subject to plan limits.
Review pricingScheduling
How do I schedule for a named timezone without changing my computer clock?
For Remote social media operators: 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.
Guide only
Scheduling
How do I schedule for a named timezone without changing my computer clock?
For Remote social media operators: 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.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: A paid account can schedule the confirmed UTC instant as an X post, subject to its plan limits.
Review pricingScheduling
How do I keep weekly posts anchored to US Eastern when daylight saving dates differ?
For Operators managing international event seasons: Build a weekly civil-time schedule and identify weeks when the cross-zone offset changes or abbreviations switch.
Guide only
Scheduling
How do I keep weekly posts anchored to US Eastern when daylight saving dates differ?
For Operators managing international event seasons: Build a weekly civil-time schedule and identify weeks when the cross-zone offset changes or abbreviations switch.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: Confirmed occurrences can be added individually to an X schedule so each UTC instant is explicit.
Review pricingScheduling
What date and time will viewers in another timezone see on my post?
For Creators explaining global post times: Preview one publication instant in several viewer-local timezones and produce a single announcement line that remains anchored to the same UTC instant.
Guide only
Scheduling
What date and time will viewers in another timezone see on my post?
For Creators explaining global post times: Preview one publication instant in several viewer-local timezones and produce a single announcement line that remains anchored to the same UTC instant.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: If a viewer-local target is selected, its confirmed UTC instant can then be scheduled on X.
Review pricingScheduling
How do I prevent an unapproved post from reaching the schedule?
For Agencies and client content teams: Keep pending content in drafts and require explicit approval before scheduling, while preserving separate manual copy for other networks when needed.
Guide only
Scheduling
How do I prevent an unapproved post from reaching the schedule?
For Agencies and client content teams: Keep pending content in drafts and require explicit approval before scheduling, while preserving separate manual copy for other networks when needed.
Start here: 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.
Try with your AI assistant
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.
Tools: whoami, get_capabilities, create_drafts, list_drafts, list_approvals
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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 [ ] Mina reviewed the exact text: "Launch note." [ ] Mina confirmed the intended account. [ ] Mina confirmed the publication time: 2026-10-01 16:00 UTC. [ ] Mina approved publication. Do 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.
When you need more: Paid workflows can retain drafts and approval records; scheduling remains a separate human-confirmed action after approval.
Review pricingScheduling
What datetime format should I use in a bulk scheduling CSV?
For Spreadsheet-based content operators: Create an unambiguous schedule CSV using offset-bearing ISO-8601 timestamps, and sort or validate combined rows before import.
Guide only
Scheduling
What datetime format should I use in a bulk scheduling CSV?
For Spreadsheet-based content operators: Create an unambiguous schedule CSV using offset-bearing ISO-8601 timestamps, and sort or validate combined rows before import.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: 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.
Review pricingScheduling
Should I start with Eastern time when my X audience is spread across the United States?
For US-focused X account operators: 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.
Available now
Scheduling
Should I start with Eastern time when my X audience is spread across the United States?
For US-focused X account operators: 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.
Start here: 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.
Try with your AI assistant
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.
Tools: best_time_teaser, whoami, get_capabilities, get_engagement_summary, get_optimal_times
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: 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.
Review pricingWebsite SEO
Why does Google say my description is unavailable because of robots.txt?
For CMS site owners whose titles, descriptions, snippets, or crawl access are missing from search results: Check whether robots.txt blocks a specific page, separate crawl access from index control, and map snippet directives correctly.
Guide only
Website SEO
Why does Google say my description is unavailable because of robots.txt?
For CMS site owners whose titles, descriptions, snippets, or crawl access are missing from search results: Check whether robots.txt blocks a specific page, separate crawl access from index control, and map snippet directives correctly.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
- 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
Worked 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.
When you need more: 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.
Review pricingWebsite SEO
Why is Google's search title different from my title tag?
For Publishers whose search result title differs from the HTML title, including multilingual and template-based sites: Compare the title element with visible title signals, identify rewrite triggers, and rewrite repetitive or mismatched titles using page-specific facts.
Available now
Website SEO
Why is Google's search title different from my title tag?
For Publishers whose search result title differs from the HTML title, including multilingual and template-based sites: Compare the title element with visible title signals, identify rewrite triggers, and rewrite repetitive or mismatched titles using page-specific facts.
Start here: 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.
Try with your AI assistant
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.
Tools: seo_audit
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
- 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/
Worked 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.
When you need more: Paid plans can store related drafts and support content scheduling and analytics. Search-result title selection remains controlled by the search engine.
Review pricingWebsite SEO
How can I create unique meta descriptions for a large catalog?
For Catalog, directory, local, and news-site editors working from structured page fields: Generate factual, unique meta descriptions from structured page fields and verify them in the page head.
Guide only
Website SEO
How can I create unique meta descriptions for a large catalog?
For Catalog, directory, local, and news-site editors working from structured page fields: Generate factual, unique meta descriptions from structured page fields and verify them in the page head.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: 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.
Review pricingWebsite SEO
How should I canonicalize duplicate home URLs such as / and /home?
For Developers and site owners managing duplicate homepage routes, variant pages, tracking parameters, and sitemap signals: Select preferred URLs, align canonicals and sitemaps, and decide when variants should be merged or kept separate.
Guide only
Website SEO
How should I canonicalize duplicate home URLs such as / and /home?
For Developers and site owners managing duplicate homepage routes, variant pages, tracking parameters, and sitemap signals: Select preferred URLs, align canonicals and sitemaps, and decide when variants should be merged or kept separate.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
- 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/
Worked 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.
When you need more: Paid TimeToPost plans can support content and distribution around the corrected canonical URL, but canonical, redirect, and sitemap implementation stays in the website stack.
Review pricingWebsite SEO
Which existing pages should a new article link to?
For Bloggers, editors, and site owners managing internal-link maintenance: Select relevant internal destinations and prioritize pages that need links first using a supplied draft and page inventory.
Guide only
Website SEO
Which existing pages should a new article link to?
For Bloggers, editors, and site owners managing internal-link maintenance: Select relevant internal destinations and prioritize pages that need links first using a supplied draft and page inventory.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: 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.
Review pricingAI visibility
Is my llms.txt valid, or did I write it like robots.txt?
For Developers and technical editors: Validate llms.txt structure against the published markdown proposal and identify robots.txt directives that do not belong.
Guide only
AI visibility
Is my llms.txt valid, or did I write it like robots.txt?
For Developers and technical editors: Validate llms.txt structure against the published markdown proposal and identify robots.txt directives that do not belong.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked example
Input:
Example llms.txt # Acme Docs > Product documentation ## Guides - [Start](/start) Quick start guide User-agent: * Disallow: /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.
When you need more: No paid TimeToPost feature validates or monitors llms.txt. Growth includes AutoSEO drafts once per week, but that is a separate content workflow.
Review pricingAI visibility
Should llms.txt be at the site root or beside my docs?
For Documentation owners and web developers: 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.
Guide only
AI visibility
Should llms.txt be at the site root or beside my docs?
For Documentation owners and web developers: 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.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: No paid TimeToPost feature resolves or maintains path-scoped llms.txt files.
Review pricingAI visibility
Which llms.txt links are broken, redirected or unnecessarily large?
For Editors maintaining curated llms.txt indexes: Manually audit the destinations listed in llms.txt and keep the result distinct from citation tracking.
Guide only
AI visibility
Which llms.txt links are broken, redirected or unnecessarily large?
For Editors maintaining curated llms.txt indexes: Manually audit the destinations listed in llms.txt and keep the result distinct from citation tracking.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: No paid TimeToPost plan provides llms.txt link monitoring.
Review pricingAI visibility
If robots.txt blocks crawlers, can they still read my llms.txt?
For Site owners managing crawl and training controls: Separate Googlebot, Google-Extended and wildcard robots.txt rules for llms.txt and its linked pages.
Guide only
AI visibility
If robots.txt blocks crawlers, can they still read my llms.txt?
For Site owners managing crawl and training controls: Separate Googlebot, Google-Extended and wildcard robots.txt rules for llms.txt and its linked pages.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: No paid TimeToPost plan changes or monitors robots.txt access controls.
Review pricingAI visibility
What article text exists before JavaScript runs?
For Teams publishing client-rendered content: Compare raw response text with the rendered page and identify a thin application shell.
Guide only
AI visibility
What article text exists before JavaScript runs?
For Teams publishing client-rendered content: Compare raw response text with the rendered page and identify a thin application shell.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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 Raw body text: none Raw body word count: 0 Rendered text word count: 10 Text present only in the rendered version: - Plans start at $29 per month - Includes email support Classification: thin client-rendered shell Possible 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.
When you need more: Growth includes AutoSEO drafts once per week. It does not guarantee server rendering or AI citations.
Review pricingAI visibility
Should this page use FAQPage or QAPage markup?
For Help-center and public-information editors: Choose the appropriate markup shape and verify that accepted answers are visible.
Guide only
AI visibility
Should this page use FAQPage or QAPage markup?
For Help-center and public-information editors: Choose the appropriate markup shape and verify that accepted answers are visible.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: Growth can create weekly AutoSEO drafts, but it does not guarantee FAQ rich results or AI citations.
Review pricingAI visibility
What does this URL need to be eligible as a supporting link in search AI features?
For Site owners evaluating public search eligibility: Review ordinary crawl, index and snippet signals without requiring a special AI file.
Guide only
AI visibility
What does this URL need to be eligible as a supporting link in search AI features?
For Site owners evaluating public search eligibility: Review ordinary crawl, index and snippet signals without requiring a special AI file.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: Growth includes weekly AutoSEO drafts. Paid plans do not guarantee indexing, rankings or supporting-link placement.
Review pricingAI agents and MCP
How do I connect my assistant to the TimeToPost MCP server?
For Marketers using an MCP-compatible assistant: Connect the authenticated remote MCP endpoint, verify the login flow, and recover safely from common authorization failures.
Available now
AI agents and MCP
How do I connect my assistant to the TimeToPost MCP server?
For Marketers using an MCP-compatible assistant: Connect the authenticated remote MCP endpoint, verify the login flow, and recover safely from common authorization failures.
Start here: 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.
Try with your AI assistant
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.
Tools: whoami, get_capabilities, list_free_tools
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: 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.
Review pricingAI agents and MCP
How can I see the real MCP tool names instead of asking the model to guess?
For People writing reliable prompts for TimeToPost: Discover authenticated capabilities, distinguish authentication from authorization, and keep each workflow limited to the smallest useful tool set.
Available now
AI agents and MCP
How can I see the real MCP tool names instead of asking the model to guess?
For People writing reliable prompts for TimeToPost: Discover authenticated capabilities, distinguish authentication from authorization, and keep each workflow limited to the smallest useful tool set.
Start here: 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.
Try with your AI assistant
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.
Tools: whoami, get_capabilities, list_free_tools, list_integrations
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
- 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/
Worked 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.
When you need more: 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.
Review pricingAI agents and MCP
Can my assistant audit one page for basic SEO and GEO issues?
For Content marketers checking a specific public page: Run deterministic single-page checks, retrieve directional keyword ideas, or inspect one model probe for brand visibility without overstating the result.
Available now
AI agents and MCP
Can my assistant audit one page for basic SEO and GEO issues?
For Content marketers checking a specific public page: Run deterministic single-page checks, retrieve directional keyword ideas, or inspect one model probe for brand visibility without overstating the result.
Start here: 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.
Try with your AI assistant
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.
Tools: seo_audit, keyword_snapshot, geo_visibility_check
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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 Title: Remote Team Content Calendar H1: Remote Team Content Calendar Meta description: missing Visible supporting text: A shared calendar helps remote teams coordinate publication dates. Recommended 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.
When you need more: 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.
Review pricingAI agents and MCP
What is a reasonable public best time to post before I have account analytics?
For Marketers without enough account-specific engagement history: Retrieve a source-labeled public timing curve, compare it with connected account analytics when available, and use actual metrics to validate the recommendation.
Available now
AI agents and MCP
What is a reasonable public best time to post before I have account analytics?
For Marketers without enough account-specific engagement history: Retrieve a source-labeled public timing curve, compare it with connected account analytics when available, and use actual metrics to validate the recommendation.
Start here: 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.
Try with your AI assistant
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.
Tools: best_time_teaser, whoami, get_capabilities, get_optimal_times, get_engagement_summary, list_posts, get_post_metrics, get_post
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: 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.
Review pricingAI agents and MCP
Can my assistant create social drafts without scheduling or publishing them?
For Editors who want assistance writing but retain publication control: Create draft records from a brief or source, then keep them in a human review queue without changing status.
Guide only
AI agents and MCP
Can my assistant create social drafts without scheduling or publishing them?
For Editors who want assistance writing but retain publication control: Create draft records from a brief or source, then keep them in a human review queue without changing status.
Start here: 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.
Try with your AI assistant
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.
Tools: whoami, get_capabilities, create_drafts, list_drafts, create_posts_from_source, get_source_status, get_post
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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 Draft 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.
When you need more: 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.
Review pricingAI agents and MCP
How do I prepare an X scheduling receipt before anything is queued?
For Teams that want a final check before scheduling an X post: 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.
Available now
AI agents and MCP
How do I prepare an X scheduling receipt before anything is queued?
For Teams that want a final check before scheduling an X post: 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.
Start here: 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.
Try with your AI assistant
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.
Tools: whoami, get_capabilities, list_drafts, get_post, scheduler_status, list_posts
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: 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.
Review pricingAnalytics and conversion
Which engagement rate should I report when I have followers and impressions?
For Creators and sponsors comparing different engagement formulas: Calculate and label follower-based and impression-based rates from user-supplied metrics without selecting a universal benchmark.
Available now
Analytics and conversion
Which engagement rate should I report when I have followers and impressions?
For Creators and sponsors comparing different engagement formulas: Calculate and label follower-based and impression-based rates from user-supplied metrics without selecting a universal benchmark.
Start here: 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.
Try with your AI assistant
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.
Tools: calculate_engagement
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: Pro analytics and get_post_metrics can support a consistent connected-X reporting workflow when the account exposes the required fields.
Review pricingAnalytics and conversion
What sponsorship quote should I calculate from my followers and my own price per thousand?
For Creators preparing a quote for one sponsored post: Calculate a base quote and an engagement-adjusted quote using only user-supplied pricing assumptions.
Guide only
Analytics and conversion
What sponsorship quote should I calculate from my followers and my own price per thousand?
For Creators preparing a quote for one sponsored post: Calculate a base quote and an engagement-adjusted quote using only user-supplied pricing assumptions.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Worked 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.
When you need more: 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.
Review pricingAnalytics and conversion
How do I create tagged links for the same campaign across several sites?
For Small businesses and indie launches sharing one offer across channels: Create one campaign URL per user-supplied source while keeping campaign and medium consistent.
Available now
Analytics and conversion
How do I create tagged links for the same campaign across several sites?
For Small businesses and indie launches sharing one offer across channels: Create one campaign URL per user-supplied source while keeping campaign and medium consistent.
Start here: 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.
Try with your AI assistant
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.
Tools: build_campaign_urls
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: After confirming the organization and draft, Starter can schedule an approved X post containing the X-specific tagged URL.
Review pricingAnalytics and conversion
Can I check campaign links for inconsistent source names and capitalization?
For Founders and freelancers tagging links manually: Lint pasted campaign URLs for missing fields, mixed case, spaces, and user-defined naming inconsistencies.
Guide only
Analytics and conversion
Can I check campaign links for inconsistent source names and capitalization?
For Founders and freelancers tagging links manually: Lint pasted campaign URLs for missing fields, mixed case, spaces, and user-defined naming inconsistencies.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: 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.
Review pricingAnalytics and conversion
Which campaign parameters disappeared after my link redirected?
For People checking links opened through shorteners or in-app browsers: Compare a planned URL with the final address copied after a real click.
Guide only
Analytics and conversion
Which campaign parameters disappeared after my link redirected?
For People checking links opened through shorteners or in-app browsers: Compare a planned URL with the final address copied after a real click.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: 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.
Review pricingAnalytics and conversion
How should I order a crowded profile link page around one main goal?
For Creators and local businesses with crowded profile link lists: Choose one primary destination and organize remaining links as secondary or overflow.
Guide only
Analytics and conversion
How should I order a crowded profile link page around one main goal?
For Creators and local businesses with crowded profile link lists: Choose one primary destination and organize remaining links as secondary or overflow.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: 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.
Review pricingAnalytics and conversion
Can you turn my article into an X thread, caption, pull quote, and email teaser?
For Founders and creators repurposing an existing long-form article: Create distinct derivative drafts and count characters for every X post.
Guide only
Analytics and conversion
Can you turn my article into an X thread, caption, pull quote, and email teaser?
For Founders and creators repurposing an existing long-form article: Create distinct derivative drafts and count characters for every X post.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
- 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
Worked 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. Thread post 2: In the workflow review, team members reported that this list helped them identify pending follow-ups sooner. Thread post 3: Practical format: send one weekly summary covering each open task, its owner, and its due date. Caption: A simple Friday summary can keep open tasks, owners, and due dates visible to the team. Pull quote: "Team members reported that the list helped them identify pending follow-ups sooner." Email 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.
When you need more: 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.
Review pricingAnalytics and conversion
What are my CPM, CPC, CPA, and CTR from spend, impressions, clicks, and conversions?
For Small businesses calculating basic promotion economics: Calculate four standard rates from user-supplied campaign totals.
Guide only
Analytics and conversion
What are my CPM, CPC, CPA, and CTR from spend, impressions, clicks, and conversions?
For Small businesses calculating basic promotion economics: Calculate four standard rates from user-supplied campaign totals.
Start here: 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.
Try with your AI assistant
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.
Ask the agent to call get_capabilities before any mutation and keep human review where the workflow requires it.
Further reading
Worked 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.
When you need more: 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.
Review pricing