29 free read-only growth tools: CAC, ROAS, PPC, schema, meta tags, robots.txt and AI crawler checks.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Calculates Amazon advertising cost of sales (ACoS), ROAS, break-even ACoS from margin, profit after ads, and TACoS against total sales.
ISO currency code for display, for example INR, USD or AED. Defaults to INR.
Optional total sales including organic, for TACoS.
Optional margin before ad costs.
Calculates Amazon advertising cost of sales (ACoS), ROAS, break-even ACoS from margin, profit after ads, and TACoS against total sales.
| Argument | Type | Description |
|---|---|---|
| ad_sales* | number | |
| ad_spend* | number | |
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| total_sales | number | Optional total sales including organic, for TACoS. |
| gross_margin_pct | number | Optional margin before ad costs. |
{
"type": "object",
"required": [
"ad_spend",
"ad_sales"
],
"properties": {
"ad_sales": {
"type": "number",
"exclusiveMinimum": 0
},
"ad_spend": {
"type": "number",
"exclusiveMinimum": 0
},
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"total_sales": {
"type": "number",
"description": "Optional total sales including organic, for TACoS.",
"exclusiveMinimum": 0
},
"gross_margin_pct": {
"type": "number",
"maximum": 100,
"description": "Optional margin before ad costs.",
"exclusiveMinimum": 0
}
}
}Estimates the monthly ad budget needed to reach a target number of new customers from cost per click, landing page conversion rate and lead to customer rate.
| Argument | Type | Description |
|---|---|---|
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| cost_per_click* | number | Expected average cost per click, in currency units. |
| target_customers* | integer | New customers wanted per month. |
| click_to_lead_pct* | number | Share of clicks that become leads, as a percentage. |
| lead_to_customer_pct* | number | Share of leads that become customers, as a percentage. |
{
"type": "object",
"required": [
"target_customers",
"cost_per_click",
"click_to_lead_pct",
"lead_to_customer_pct"
],
"properties": {
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"cost_per_click": {
"type": "number",
"description": "Expected average cost per click, in currency units.",
"exclusiveMinimum": 0
},
"target_customers": {
"type": "integer",
"minimum": 1,
"description": "New customers wanted per month."
},
"click_to_lead_pct": {
"type": "number",
"maximum": 100,
"description": "Share of clicks that become leads, as a percentage.",
"exclusiveMinimum": 0
},
"lead_to_customer_pct": {
"type": "number",
"maximum": 100,
"description": "Share of leads that become customers, as a percentage.",
"exclusiveMinimum": 0
}
}
}Reads a website's public robots.txt and llms.txt and reports whether AI crawlers from OpenAI, Anthropic, Perplexity and Google (GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended and others) are allowed, restricted or blocked.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Public domain to check, for example example.com. |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Public domain to check, for example example.com."
}
}
}Calculates employee attrition or customer churn rate for a period from separations and headcount at the start and end, with a simple annualised rate.
| Argument | Type | Description |
|---|---|---|
| separations* | number | People or customers who left in the period. |
| headcount_end* | number | |
| period_months | number | |
| headcount_start* | number |
{
"type": "object",
"required": [
"separations",
"headcount_start",
"headcount_end"
],
"properties": {
"separations": {
"type": "number",
"minimum": 0,
"description": "People or customers who left in the period."
},
"headcount_end": {
"type": "number",
"minimum": 0
},
"period_months": {
"type": "number",
"default": 1,
"maximum": 12,
"exclusiveMinimum": 0
},
"headcount_start": {
"type": "number",
"minimum": 0
}
}
}Returns the link to book a free 30-minute growth strategy call with upGrowth. Use only when the user asks to speak with upGrowth.
No arguments.
{
"type": "object",
"properties": {}
}Calculates break-even units and revenue from fixed costs, price and variable cost per unit, the contribution margin, and units needed for a target profit.
| Argument | Type | Description |
|---|---|---|
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| fixed_costs* | number | |
| target_profit | number | Optional profit goal. |
| price_per_unit* | number | |
| variable_cost_per_unit* | number |
{
"type": "object",
"required": [
"fixed_costs",
"price_per_unit",
"variable_cost_per_unit"
],
"properties": {
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"fixed_costs": {
"type": "number",
"minimum": 0
},
"target_profit": {
"type": "number",
"minimum": 0,
"description": "Optional profit goal."
},
"price_per_unit": {
"type": "number",
"exclusiveMinimum": 0
},
"variable_cost_per_unit": {
"type": "number",
"minimum": 0
}
}
}Calculates ROI for a marketing campaign or channel (content, email, events, influencer, recruitment marketing) on revenue and on gross profit.
| Argument | Type | Description |
|---|---|---|
| cost* | number | Total campaign cost. |
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| campaign_name | string | Optional label. |
| gross_margin_pct | number | Optional margin for profit-based ROI. |
| attributed_revenue* | number |
{
"type": "object",
"required": [
"cost",
"attributed_revenue"
],
"properties": {
"cost": {
"type": "number",
"description": "Total campaign cost.",
"exclusiveMinimum": 0
},
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"campaign_name": {
"type": "string",
"description": "Optional label."
},
"gross_margin_pct": {
"type": "number",
"maximum": 100,
"description": "Optional margin for profit-based ROI.",
"exclusiveMinimum": 0
},
"attributed_revenue": {
"type": "number",
"minimum": 0
}
}
}Analyses text the user pastes: word, sentence and paragraph counts, reading time, approximate Flesch reading ease, long sentences and paragraphs, headings found, and focus keyword count, density and placement. Counts exactly, which assistants often get wrong.
| Argument | Type | Description |
|---|---|---|
| text* | string | The article or page text, plain text, Markdown or HTML. Up to 60,000 characters. |
| keyword | string | Optional focus keyword or phrase. |
| secondary_keywords | array | Optional extra keywords to count. |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The article or page text, plain text, Markdown or HTML. Up to 60,000 characters."
},
"keyword": {
"type": "string",
"description": "Optional focus keyword or phrase."
},
"secondary_keywords": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"description": "Optional extra keywords to count."
}
}
}Calculates customer lifetime value for repeat-purchase businesses such as D2C and ecommerce from average order value, purchases per year, lifespan and margin, with optional discounting and LTV to CAC.
| Argument | Type | Description |
|---|---|---|
| cac | number | Optional customer acquisition cost. |
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| gross_margin_pct* | number | |
| purchases_per_year* | number | |
| average_order_value* | number | |
| customer_lifespan_years* | number | |
| annual_discount_rate_pct | number | Optional, to discount future years. |
{
"type": "object",
"required": [
"average_order_value",
"purchases_per_year",
"customer_lifespan_years",
"gross_margin_pct"
],
"properties": {
"cac": {
"type": "number",
"description": "Optional customer acquisition cost.",
"exclusiveMinimum": 0
},
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"gross_margin_pct": {
"type": "number",
"maximum": 100,
"exclusiveMinimum": 0
},
"purchases_per_year": {
"type": "number",
"exclusiveMinimum": 0
},
"average_order_value": {
"type": "number",
"exclusiveMinimum": 0
},
"customer_lifespan_years": {
"type": "number",
"exclusiveMinimum": 0
},
"annual_discount_rate_pct": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Optional, to discount future years."
}
}
}Calculates average order value, conversion rate, revenue per visitor and orders per customer, and the sessions needed to hit a revenue target.
| Argument | Type | Description |
|---|---|---|
| orders* | integer | |
| revenue* | number | |
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| sessions | number | Optional sessions or visitors in the same period. |
| customers | integer | Optional unique customers. |
| target_revenue | number | Optional revenue goal for the same period length. |
{
"type": "object",
"required": [
"revenue",
"orders"
],
"properties": {
"orders": {
"type": "integer",
"minimum": 1
},
"revenue": {
"type": "number",
"minimum": 0
},
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"sessions": {
"type": "number",
"description": "Optional sessions or visitors in the same period.",
"exclusiveMinimum": 0
},
"customers": {
"type": "integer",
"minimum": 1,
"description": "Optional unique customers."
},
"target_revenue": {
"type": "number",
"description": "Optional revenue goal for the same period length.",
"exclusiveMinimum": 0
}
}
}Calculates social media engagement rate for Instagram, YouTube, LinkedIn or any platform from likes, comments, shares and saves, by followers, reach, impressions or views.
| Argument | Type | Description |
|---|---|---|
| likes | number | |
| posts | integer | Number of posts the totals cover. |
| saves | number | |
| shares | number | |
| comments | number | |
| base_type | string | What to divide by. |
| base_value* | number | Followers, reach, impressions or views. |
{
"type": "object",
"required": [
"base_value"
],
"properties": {
"likes": {
"type": "number",
"minimum": 0
},
"posts": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Number of posts the totals cover."
},
"saves": {
"type": "number",
"minimum": 0
},
"shares": {
"type": "number",
"minimum": 0
},
"comments": {
"type": "number",
"minimum": 0
},
"base_type": {
"enum": [
"followers",
"reach",
"impressions",
"views"
],
"type": "string",
"default": "followers",
"description": "What to divide by."
},
"base_value": {
"type": "number",
"description": "Followers, reach, impressions or views.",
"exclusiveMinimum": 0
}
}
}Returns documented 2026 growth moves by Indian companies from upGrowth's Growth Moves research (January to September 2026), filtered by sector, company or keyword. Each move includes the leader, date and a link to the original source.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum moves to return. |
| sector | string | Sector to search. Use any to search all sectors. |
| company | string | Optional company name to match, for example Razorpay. |
| keyword | string | Optional keyword to match in the move description, for example acquisition, UPI or AI agents. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 5,
"maximum": 14,
"minimum": 1,
"description": "Maximum moves to return."
},
"sector": {
"enum": [
"fintech",
"ecommerce",
"healthtech",
"saas",
"any"
],
"type": "string",
"default": "any",
"description": "Sector to search. Use any to search all sectors."
},
"company": {
"type": "string",
"description": "Optional company name to match, for example Razorpay."
},
"keyword": {
"type": "string",
"description": "Optional keyword to match in the move description, for example acquisition, UPI or AI agents."
}
}
}Projects a value forward at a compound growth rate per period (exponential growth), shows each period, the doubling time and how long it takes to reach a target.
| Argument | Type | Description |
|---|---|---|
| periods* | integer | |
| period_type | string | |
| start_value* | number | |
| target_value | number | Optional target to reach. |
| growth_rate_pct* | number | Growth per period as a percentage; negative for decline. |
{
"type": "object",
"required": [
"start_value",
"growth_rate_pct",
"periods"
],
"properties": {
"periods": {
"type": "integer",
"maximum": 120,
"minimum": 1
},
"period_type": {
"enum": [
"month",
"quarter",
"year"
],
"type": "string",
"default": "month"
},
"start_value": {
"type": "number",
"exclusiveMinimum": 0
},
"target_value": {
"type": "number",
"description": "Optional target to reach.",
"exclusiveMinimum": 0
},
"growth_rate_pct": {
"type": "number",
"description": "Growth per period as a percentage; negative for decline.",
"exclusiveMinimum": -100
}
}
}Calculates total growth and compound growth per period between a start and end value, for example month on month, quarter on quarter or year on year (CAGR).
| Argument | Type | Description |
|---|---|---|
| periods* | number | Number of periods between start and end, for example 12. |
| end_value* | number | Value at the end. |
| period_type | string | Length of 1 period. |
| start_value* | number | Value at the start, for example revenue or users. |
{
"type": "object",
"required": [
"start_value",
"end_value",
"periods"
],
"properties": {
"periods": {
"type": "number",
"description": "Number of periods between start and end, for example 12.",
"exclusiveMinimum": 0
},
"end_value": {
"type": "number",
"minimum": 0,
"description": "Value at the end."
},
"period_type": {
"enum": [
"month",
"quarter",
"year"
],
"type": "string",
"default": "month",
"description": "Length of 1 period."
},
"start_value": {
"type": "number",
"description": "Value at the start, for example revenue or users.",
"exclusiveMinimum": 0
}
}
}Estimates monthly and yearly Instagram brand-deal income from the rates the user charges per post, per story or per 1,000 followers, and the cost per engagement a brand pays.
| Argument | Type | Description |
|---|---|---|
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| followers* | integer | Follower count. |
| rate_per_post | number | Fee per sponsored post, in currency units. Use this or rate_per_1000_followers. |
| rate_per_story | number | Optional fee per story. |
| posts_per_month* | number | Sponsored posts or reels per month. |
| stories_per_month | number | Optional sponsored stories per month. |
| rate_per_1000_followers | number | Fee per post per 1,000 followers, in currency units. |
| avg_engagements_per_post | number | Optional average likes plus comments plus saves plus shares per post. |
Works back from customer lifetime value to the most a business can pay to acquire a customer (and, optionally, a lead) while keeping a target LTV to CAC ratio, 3:1 by default.
| Argument | Type | Description |
|---|---|---|
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| gross_margin_pct* | number | Gross margin as a percentage. |
| monthly_churn_pct* | number | Share of customers lost per month as a percentage. |
| target_ltv_to_cac | number | Target LTV to CAC ratio, for example 3 for 3:1. |
| lead_to_customer_pct | number | Optional. Share of leads that become customers, to work out the maximum cost per lead. |
| monthly_revenue_per_customer* | number | Average revenue per customer per month (ARPU), in currency units. |
{
"type": "object",
"required": [
"monthly_revenue_per_customer",
"gross_margin_pct",
"monthly_churn_pct"
],
"properties": {
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"gross_margin_pct": {
"type": "number",
"maximum": 100,
"description": "Gross margin as a percentage.",
"exclusiveMinimum": 0
},
"monthly_churn_pct": {
"type": "number",
"maximum": 100,
"description": "Share of customers lost per month as a percentage.",
"exclusiveMinimum": 0
},
"target_ltv_to_cac": {
"type": "number",
"default": 3,
"description": "Target LTV to CAC ratio, for example 3 for 3:1.",
"exclusiveMinimum": 0
},
"lead_to_customer_pct": {
"type": "number",
"maximum": 100,
"description": "Optional. Share of leads that become customers, to work out the maximum cost per lead.",
"exclusiveMinimum": 0
},
"monthly_revenue_per_customer": {
"type": "number",
"description": "Average revenue per customer per month (ARPU), in currency units.",
"exclusiveMinimum": 0
}
}
}Calculates merchant discount rate (MDR) charges on card or payment gateway sales: the MDR fee, GST on that fee, total cost, effective rate and net settlement. Uses the MDR % the user gives; it does not look up provider rates.
| Argument | Type | Description |
|---|---|---|
| gst_pct | number | GST charged on the MDR fee, as a percentage. |
| mdr_pct* | number | MDR or TDR charged by the provider, as a percentage, for example 1.8. |
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| sales_value* | number | Total value of the transactions, in currency units. |
| transactions | integer | Optional. Number of transactions, needed only with a fixed fee per transaction. |
| fixed_fee_per_transaction | number | Optional fixed fee per transaction, in currency units. |
{
"type": "object",
"required": [
"sales_value",
"mdr_pct"
],
"properties": {
"gst_pct": {
"type": "number",
"default": 18,
"maximum": 100,
"minimum": 0,
"description": "GST charged on the MDR fee, as a percentage."
},
"mdr_pct": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "MDR or TDR charged by the provider, as a percentage, for example 1.8."
},
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"sales_value": {
"type": "number",
"description": "Total value of the transactions, in currency units.",
"exclusiveMinimum": 0
},
"transactions": {
"type": "integer",
"minimum": 1,
"description": "Optional. Number of transactions, needed only with a fixed fee per transaction."
},
"fixed_fee_per_transaction": {
"type": "number",
"minimum": 0,
"description": "Optional fixed fee per transaction, in currency units."
}
}
}Builds the HTML head tags for a page: title, meta description, canonical, Open Graph and Twitter card tags, with character counts and truncation warnings.
| Argument | Type | Description |
|---|---|---|
| url* | string | Canonical page URL. |
| title* | string | Page title. |
| image_url | string | Optional share image URL. |
| page_type | string | Open Graph type. |
| site_name | string | Optional site or brand name. |
| description* | string | Meta description. |
| twitter_handle | string | Optional X (Twitter) handle, for example @upgrowth. |
{
"type": "object",
"required": [
"title",
"description",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL."
},
"title": {
"type": "string",
"description": "Page title."
},
"image_url": {
"type": "string",
"description": "Optional share image URL."
},
"page_type": {
"enum": [
"website",
"article"
],
"type": "string",
"default": "website",
"description": "Open Graph type."
},
"site_name": {
"type": "string",
"description": "Optional site or brand name."
},
"description": {
"type": "string",
"description": "Meta description."
},
"twitter_handle": {
"type": "string",
"description": "Optional X (Twitter) handle, for example @upgrowth."
}
}
}Calculates the simple percentage change between 2 values, such as year over year (YoY), month over month (MoM), quarter over quarter or week over week, including sales or revenue growth and percentage increase or decrease.
| Argument | Type | Description |
|---|---|---|
| comparison | string | Which comparison this is, used only for labelling. |
| current_value* | number | Value in the later period. |
| previous_value* | number | Value in the earlier period. |
{
"type": "object",
"required": [
"previous_value",
"current_value"
],
"properties": {
"comparison": {
"enum": [
"yoy",
"mom",
"qoq",
"wow",
"custom"
],
"type": "string",
"default": "custom",
"description": "Which comparison this is, used only for labelling."
},
"current_value": {
"type": "number",
"description": "Value in the later period."
},
"previous_value": {
"type": "number",
"description": "Value in the earlier period."
}
}
}Forecasts a paid search or social budget: clicks, conversions, cost per acquisition, revenue, ROAS, profit after ad spend and break-even CPA, from budget, CPC and conversion rate.
| Argument | Type | Description |
|---|---|---|
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| cost_per_click* | number | |
| monthly_budget* | number | |
| gross_margin_pct | number | Optional gross margin for profit and break-even CPA. |
| conversion_rate_pct* | number | Share of clicks that convert. |
| value_per_conversion | number | Optional revenue per conversion. |
{
"type": "object",
"required": [
"monthly_budget",
"cost_per_click",
"conversion_rate_pct"
],
"properties": {
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"cost_per_click": {
"type": "number",
"exclusiveMinimum": 0
},
"monthly_budget": {
"type": "number",
"exclusiveMinimum": 0
},
"gross_margin_pct": {
"type": "number",
"maximum": 100,
"description": "Optional gross margin for profit and break-even CPA.",
"exclusiveMinimum": 0
},
"conversion_rate_pct": {
"type": "number",
"maximum": 100,
"description": "Share of clicks that convert.",
"exclusiveMinimum": 0
},
"value_per_conversion": {
"type": "number",
"minimum": 0,
"description": "Optional revenue per conversion."
}
}
}Calculates return on ad spend from ad revenue and ad spend, and the break-even ROAS implied by gross margin, then says whether the campaign covers its product cost.
| Argument | Type | Description |
|---|---|---|
| ad_spend* | number | Ad spend for the same period, in currency units. |
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| ad_revenue* | number | Revenue attributed to the ads, in currency units. |
| gross_margin_pct* | number | Gross margin as a percentage. |
{
"type": "object",
"required": [
"ad_revenue",
"ad_spend",
"gross_margin_pct"
],
"properties": {
"ad_spend": {
"type": "number",
"description": "Ad spend for the same period, in currency units.",
"exclusiveMinimum": 0
},
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"ad_revenue": {
"type": "number",
"minimum": 0,
"description": "Revenue attributed to the ads, in currency units."
},
"gross_margin_pct": {
"type": "number",
"maximum": 100,
"description": "Gross margin as a percentage.",
"exclusiveMinimum": 0
}
}
}Writes a robots.txt file that allows or blocks AI crawlers by purpose: model training (GPTBot, ClaudeBot, Google-Extended), AI search (OAI-SearchBot, Claude-SearchBot, PerplexityBot) and user-triggered fetches (ChatGPT-User, Claude-User, Perplexity-User), plus paths to keep private and a sitemap. Never blocks Googlebot.
| Argument | Type | Description |
|---|---|---|
| ai_search | string | Whether AI search crawlers may crawl the site. |
| ai_training | string | Whether AI model training crawlers may crawl the site. |
| sitemap_url | string | Optional full sitemap URL, for example https://example.com/sitemap.xml. |
| ai_user_fetch | string | Whether assistants may fetch pages when a user asks about them. |
| disallow_paths | array | Optional paths to keep out of all crawlers, each starting with /, for example /wp-admin/. |
{
"type": "object",
"properties": {
"ai_search": {
"enum": [
"allow",
"block"
],
"type": "string",
"default": "allow",
"description": "Whether AI search crawlers may crawl the site."
},
"ai_training": {
"enum": [
"allow",
"block"
],
"type": "string",
"default": "allow",
"description": "Whether AI model training crawlers may crawl the site."
},
"sitemap_url": {
"type": "string",
"description": "Optional full sitemap URL, for example https://example.com/sitemap.xml."
},
"ai_user_fetch": {
"enum": [
"allow",
"block"
],
"type": "string",
"default": "allow",
"description": "Whether assistants may fetch pages when a user asks about them."
},
"disallow_paths": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "Optional paths to keep out of all crawlers, each starting with /, for example /wp-admin/."
}
}
}Builds valid schema.org JSON-LD for a page: FAQ, local business, organization, article or blog post, product, person or breadcrumb. Checks the properties Google lists as required for that type and returns a ready-to-paste script tag.
| Argument | Type | Description |
|---|---|---|
| data* | object | Fields for that type. faq: questions [{question, answer}]. local_business: name, business_type (for example Dentist), address {street, locality, region, postal_code, country}, telephone, url, image, price_range, geo {latitude, longitude}, opening_hours [{days: [Monday...], opens: "09:00", closes: "18:00"}]. organization: name, organization_type, url, logo, description, legal_name, founding_date, email, telephone, same_as [urls], address. article: headline, article_type (Article, BlogPosting or NewsArticle), url, images [urls], date_published, date_modified, authors [{name, url, job_title}], publisher {name, logo}. product: name, description, images, brand, sku, price, currency, availability (InStock, OutOfStock, PreOrder, SoldOut), price_valid_until, rating_value, review_count. person: name, url, job_title, works_for, image, description, same_as. breadcrumb: items [{name, url}]. |
| schema_type* | string | Which schema to build. |
{
"type": "object",
"required": [
"schema_type",
"data"
],
"properties": {
"data": {
"type": "object",
"description": "Fields for that type. faq: questions [{question, answer}]. local_business: name, business_type (for example Dentist), address {street, locality, region, postal_code, country}, telephone, url, image, price_range, geo {latitude, longitude}, opening_hours [{days: [Monday...], opens: \"09:00\", closes: \"18:00\"}]. organization: name, organization_type, url, logo, description, legal_name, founding_date, email, telephone, same_as [urls], address. article: headline, article_type (Article, BlogPosting or NewsArticle), url, images [urls], date_published, date_modified, authors [{name, url, job_title}], publisher {name, logo}. product: name, description, images, brand, sku, price, currency, availability (InStock, OutOfStock, PreOrder, SoldOut), price_valid_until, rating_value, review_count. person: name, url, job_title, works_for, image, description, same_as. breadcrumb: items [{name, url}]."
},
"schema_type": {
"enum": [
"faq",
"local_business",
"organization",
"article",
"product",
"person",
"breadcrumb"
],
"type": "string",
"description": "Which schema to build."
}
}
}Estimates the monthly return on an SEO investment from extra organic visits, conversion rate, value per conversion and monthly SEO cost, plus the break-even traffic gain.
| Argument | Type | Description |
|---|---|---|
| months | number | Months to total over. |
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| gross_margin_pct | number | Optional gross margin as a percentage. Leave out to measure on revenue. |
| monthly_seo_cost* | number | Monthly SEO spend, in currency units. |
| conversion_rate_pct* | number | Share of visits that convert, as a percentage. |
| value_per_conversion* | number | Average revenue per conversion (order value or deal value), in currency units. |
| monthly_organic_visits_gain* | number | Extra organic visits per month expected from SEO. |
Calculates share of voice for a brand against competitors on any metric: AI assistant citations or mentions, search impressions, ad impressions, social mentions or press coverage.
| Argument | Type | Description |
|---|---|---|
| metric | string | What was counted, for example ChatGPT citations or impressions. |
| brand_name* | string | |
| brand_value* | number | |
| competitors* | array |
{
"type": "object",
"required": [
"brand_name",
"brand_value",
"competitors"
],
"properties": {
"metric": {
"type": "string",
"description": "What was counted, for example ChatGPT citations or impressions."
},
"brand_name": {
"type": "string"
},
"brand_value": {
"type": "number",
"minimum": 0
},
"competitors": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "number",
"minimum": 0
}
}
},
"maxItems": 20
}
}
}Calculates customer acquisition cost (CAC), customer lifetime value (LTV), the LTV to CAC ratio and CAC payback in months from spend, new customers, revenue per customer, gross margin and churn.
| Argument | Type | Description |
|---|---|---|
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| new_customers* | integer | New paying customers acquired in the same period. |
| gross_margin_pct* | number | Gross margin as a percentage, for example 70. |
| acquisition_spend* | number | Total sales and marketing spend for the period, in currency units. |
| monthly_churn_pct* | number | Share of customers lost per month as a percentage, for example 3. |
| monthly_revenue_per_customer* | number | Average revenue per customer per month (ARPU), in currency units. |
{
"type": "object",
"required": [
"acquisition_spend",
"new_customers",
"monthly_revenue_per_customer",
"gross_margin_pct",
"monthly_churn_pct"
],
"properties": {
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"new_customers": {
"type": "integer",
"minimum": 1,
"description": "New paying customers acquired in the same period."
},
"gross_margin_pct": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Gross margin as a percentage, for example 70."
},
"acquisition_spend": {
"type": "number",
"minimum": 0,
"description": "Total sales and marketing spend for the period, in currency units."
},
"monthly_churn_pct": {
"type": "number",
"maximum": 100,
"description": "Share of customers lost per month as a percentage, for example 3.",
"exclusiveMinimum": 0
},
"monthly_revenue_per_customer": {
"type": "number",
"minimum": 0,
"description": "Average revenue per customer per month (ARPU), in currency units."
}
}
}Estimates display ad revenue for a website or blog from monthly pageviews and page RPM, or from ad impressions per page, CPM and fill rate.
| Argument | Type | Description |
|---|---|---|
| cpm | number | Earnings per 1,000 ad impressions, in currency units. |
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| page_rpm | number | Earnings per 1,000 pageviews (from AdSense reports), in currency units. Use this or cpm. |
| ads_per_page | number | Ad units per page, used with cpm. |
| fill_rate_pct | number | Share of ad requests filled. |
| monthly_pageviews* | number |
{
"type": "object",
"required": [
"monthly_pageviews"
],
"properties": {
"cpm": {
"type": "number",
"minimum": 0,
"description": "Earnings per 1,000 ad impressions, in currency units."
},
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"page_rpm": {
"type": "number",
"minimum": 0,
"description": "Earnings per 1,000 pageviews (from AdSense reports), in currency units. Use this or cpm."
},
"ads_per_page": {
"type": "number",
"minimum": 0,
"description": "Ad units per page, used with cpm."
},
"fill_rate_pct": {
"type": "number",
"default": 100,
"maximum": 100,
"minimum": 0,
"description": "Share of ad requests filled."
},
"monthly_pageviews": {
"type": "number",
"exclusiveMinimum": 0
}
}
}Estimates YouTube ad earnings from monthly views and the RPM from YouTube Studio (or CPM, monetized playback % and the 55% long-form creator share), plus watch hours against the YouTube Partner Program threshold.
| Argument | Type | Description |
|---|---|---|
| cpm | number | Ad CPM, in currency units. Needs monetized_playback_pct. |
| rpm | number | Revenue per 1,000 views from YouTube Studio, in currency units. Use this or cpm. |
| currency | string | ISO currency code for display, for example INR, USD or AED. Defaults to INR. |
| subscribers | integer | Optional subscriber count. |
| monthly_views* | number | Views per month on long-form videos. |
| monetized_playback_pct | number | Share of views that show an ad, as a percentage. |
| avg_view_duration_minutes | number | Optional average view duration in minutes, to work out watch hours. |
{
"type": "object",
"required": [
"monthly_views"
],
"properties": {
"cpm": {
"type": "number",
"minimum": 0,
"description": "Ad CPM, in currency units. Needs monetized_playback_pct."
},
"rpm": {
"type": "number",
"minimum": 0,
"description": "Revenue per 1,000 views from YouTube Studio, in currency units. Use this or cpm."
},
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"subscribers": {
"type": "integer",
"minimum": 0,
"description": "Optional subscriber count."
},
"monthly_views": {
"type": "number",
"description": "Views per month on long-form videos.",
"exclusiveMinimum": 0
},
"monetized_playback_pct": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Share of views that show an ad, as a percentage."
},
"avg_view_duration_minutes": {
"type": "number",
"minimum": 0,
"description": "Optional average view duration in minutes, to work out watch hours."
}
}
}Compares year-to-date totals with the same period last year, from monthly values or YTD totals, and gives a simple full-year run rate.
| Argument | Type | Description |
|---|---|---|
| last_ytd_total | number | Alternative: last year's total for the same period. |
| months_elapsed | integer | Months covered, needed with totals for the run rate. |
| this_ytd_total | number | Alternative: this year's YTD total. |
| last_year_monthly | array | Last year's values for the same months. |
| this_year_monthly | array | This year's values by month so far, January first (or first month of the financial year). |
{
"type": "object",
"properties": {
"last_ytd_total": {
"type": "number",
"description": "Alternative: last year's total for the same period."
},
"months_elapsed": {
"type": "integer",
"maximum": 12,
"minimum": 1,
"description": "Months covered, needed with totals for the run rate."
},
"this_ytd_total": {
"type": "number",
"description": "Alternative: this year's YTD total."
},
"last_year_monthly": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 12,
"description": "Last year's values for the same months."
},
"this_year_monthly": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 12,
"description": "This year's values by month so far, January first (or first month of the financial year)."
}
}
}{
"type": "object",
"required": [
"followers",
"posts_per_month"
],
"properties": {
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"followers": {
"type": "integer",
"minimum": 1,
"description": "Follower count."
},
"rate_per_post": {
"type": "number",
"minimum": 0,
"description": "Fee per sponsored post, in currency units. Use this or rate_per_1000_followers."
},
"rate_per_story": {
"type": "number",
"minimum": 0,
"description": "Optional fee per story."
},
"posts_per_month": {
"type": "number",
"minimum": 0,
"description": "Sponsored posts or reels per month."
},
"stories_per_month": {
"type": "number",
"minimum": 0,
"description": "Optional sponsored stories per month."
},
"rate_per_1000_followers": {
"type": "number",
"minimum": 0,
"description": "Fee per post per 1,000 followers, in currency units."
},
"avg_engagements_per_post": {
"type": "number",
"minimum": 0,
"description": "Optional average likes plus comments plus saves plus shares per post."
}
}
}{
"type": "object",
"required": [
"monthly_organic_visits_gain",
"conversion_rate_pct",
"value_per_conversion",
"monthly_seo_cost"
],
"properties": {
"months": {
"type": "number",
"default": 12,
"description": "Months to total over.",
"exclusiveMinimum": 0
},
"currency": {
"type": "string",
"default": "INR",
"description": "ISO currency code for display, for example INR, USD or AED. Defaults to INR."
},
"gross_margin_pct": {
"type": "number",
"maximum": 100,
"description": "Optional gross margin as a percentage. Leave out to measure on revenue.",
"exclusiveMinimum": 0
},
"monthly_seo_cost": {
"type": "number",
"description": "Monthly SEO spend, in currency units.",
"exclusiveMinimum": 0
},
"conversion_rate_pct": {
"type": "number",
"maximum": 100,
"description": "Share of visits that convert, as a percentage.",
"exclusiveMinimum": 0
},
"value_per_conversion": {
"type": "number",
"minimum": 0,
"description": "Average revenue per conversion (order value or deal value), in currency units."
},
"monthly_organic_visits_gain": {
"type": "number",
"minimum": 0,
"description": "Extra organic visits per month expected from SEO."
}
}
}