kanto-labs-mcp
OfficialEnriches company profiles with data from Wikidata, including industry, headquarters, founding year, employees, revenue, and stock ticker.
Searches freely licensed images on Wikimedia Commons, returning license, author, and attribution details.
Provides topic interest trends and daily most-read articles using Wikipedia pageviews and Wikipedia language edition data.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kanto-labs-mcpDetect the website tech stack for https://example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Kanto Labs MCP server
An MCP server that gives AI assistants (Claude, Cursor, VS Code Copilot and any other MCP client) 14 web, data and media tools, backed by Kanto Labs' actors on the Apify Store:
Tool | What it does | Price |
| Detect the technologies a website runs on: CMS, ecommerce, frameworks, analytics, CDN, hosting (7,600+ fingerprints). | $0.003 per website |
| Convert PDF, DOCX, PPTX, XLSX, EPUB, HTML and more from a URL to Markdown, with page/word counts and optional RAG chunks. | $0.004 per document |
| On-page SEO audit: 0-100 score and prioritized issues, robots.txt, sitemap, llms.txt and AI-crawler checks, optional broken links and crawl. | $0.004 per page |
| OCR text from images, screenshots, photos and scanned PDFs, in reading order with confidence and optional line boxes. | $0.003 per image or PDF page ($0.008 with quality "accurate") |
| Domain RDAP/WHOIS, DNS records, SSL certificate expiry and SPF/DKIM/DMARC email security grade. | $0.003 per domain |
| Extract scene-change or evenly spaced frames from video files, with public image links, timestamps and a free contact sheet. | $0.002 per frame |
| Download every image from web pages or image links, de-duplicated and filtered, with public download URLs. | $0.002 per image |
| 0-100 domain authority from the open Common Crawl web graph (133M domains): web rank, PageRank rank, top-% percentile and monthly trend. | $0.001 per domain scored (unranked domains free) |
| Company profile from a domain or name: logo, description, social profiles, app links and key pages, plus industry, HQ, founding year, employees, revenue and ticker from Wikidata. | $0.003 per company enriched |
| Upscale images 2x or 4x with Real-ESRGAN (photo or anime model), transparency kept, with public download links. | $0.01 per image ($0.06 per large image with allowLargeImages) |
| Interest over time for topics on a shared 0-100 scale (a Google Trends alternative) from official Wikipedia pageviews since 2015: peak, trend, spikes and interest by language. | $0.003 per topic |
| The most-read topics of a day per country or Wikipedia language edition, with views and a one-line description. | $0.0005 per trending article |
| Website popularity from real Chrome user data (CrUX): global rank tier, tier in 40 countries, top countries and monthly trend, plus Majestic rank and referring subnets. | $0.002 per domain ranked (unranked domains free) |
| Search freely licensed images on Wikimedia Commons, with license, author and a ready-to-paste attribution line; filter by license, size, orientation and format. | $0.001 per image |
Failed or unreachable inputs are not charged.
Coming soon:
extract_video_frames,download_images,check_domain_authority,enrich_company,upscale_image,get_topic_trends,get_trending_topics,check_website_traffic_rank,search_free_imagesare listed already, but their actors are not yet public on the Apify Store; until they are, calls to them return an "actor not yet public" error (nothing is charged).
How billing works
The server is free and open source (MIT). Each tool call runs the matching actor on Apify with your own Apify API token, so the actor's pay-per-event price is billed to your Apify account (Apify's free plan includes monthly credit). There is no Kanto Labs account, key or subscription.
Every call carries a spending cap: maxTotalChargeUsd (default $1.00, change it with the KANTO_MAX_CHARGE_USD env var or per call). Apify stops the run once it has charged that much, so an assistant cannot run up a large bill by accident. Each result states what the call cost.
Related MCP server: Apify MCP Server
Setup
Get an Apify API token: sign up at apify.com, then Settings -> API & Integrations (console.apify.com/settings/integrations).
Add the server to your client (Node.js 18.17+ required;
npxdownloads it on first run).
Claude Desktop
Edit claude_desktop_config.json (Settings -> Developer -> Edit Config):
{
"mcpServers": {
"kanto-labs": {
"command": "npx",
"args": ["-y", "kanto-labs-mcp"],
"env": { "APIFY_TOKEN": "apify_api_your_token_here" }
}
}
}Or install the one-click bundle kanto-labs-mcp.mcpb from the Releases page: double-click it and paste your token when asked.
Claude Code
claude mcp add kanto-labs -e APIFY_TOKEN=apify_api_your_token_here -- npx -y kanto-labs-mcpCursor
~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": {
"kanto-labs": {
"command": "npx",
"args": ["-y", "kanto-labs-mcp"],
"env": { "APIFY_TOKEN": "apify_api_your_token_here" }
}
}
}VS Code (GitHub Copilot agent mode)
.vscode/mcp.json - the token is asked for once and stored securely:
{
"inputs": [
{ "type": "promptString", "id": "apify_token", "description": "Apify API token", "password": true }
],
"servers": {
"kanto-labs": {
"type": "stdio",
"command": "npx",
"args": ["-y", "kanto-labs-mcp"],
"env": { "APIFY_TOKEN": "${input:apify_token}" }
}
}
}Windsurf, Cline, Zed and others
Any client that launches stdio servers works: command npx, args -y kanto-labs-mcp, env APIFY_TOKEN.
Windows: if your client reports
spawn npx ENOENT, use"command": "cmd"with"args": ["/c", "npx", "-y", "kanto-labs-mcp"].
Example prompts
"What is stripe.com built with? And shopify.com?"
"Convert https://arxiv.org/pdf/1706.03762 to Markdown and summarize section 3."
"Audit the SEO of https://example.com and list the three most important fixes."
"Crawl up to 20 pages of example.com, check broken links, keep it under $0.10."
"Read the text on this receipt: https://example.com/receipt.jpg - what is the total?"
"OCR this scanned Japanese PDF with the accurate model, first 5 pages only."
"When do stripe.com and shopify.com expire, who is their registrar, and do they have DMARC set up?"
"Is kanto-example-name.com still available to register?"
"Pull 8 frames from https://media.w3.org/2010/05/sintel/trailer.mp4 and describe what happens in the video."
"Download all product images wider than 300 px from https://books.toscrape.com/ as WEBP."
"Which of these link-building prospects has the highest domain authority: example-blog.com, another-site.org, third-site.net?"
"Enrich hubspot.com, Siemens and canva.com: industry, HQ, employees, logo and LinkedIn page."
"Upscale https://example.com/product-small.jpg 4x as PNG."
"Compare interest in ChatGPT, Gemini and Claude over the past 12 months. Which is growing?"
"What were people in Japan and Germany reading about yesterday?"
"How popular are zalando.de and allegro.pl, and in which countries?"
"Find 10 landscape photos of the Eiffel Tower at night that need no attribution."
Tool parameters
All tools also accept:
Parameter | Meaning |
| Spending cap for this call in USD (default |
| Give up after this many seconds (10-300, default 280). Apify's synchronous runs are limited to 300 s, so split big batches. |
detect_website_tech_stack: urls (required), minConfidence, includeDescriptions.
convert_document_to_markdown: documentUrls (required), chunkSize, chunkOverlap, includeMarkdown, maxFileSizeMb.
audit_website_seo: urls (required), maxPagesPerSite, checkBrokenLinks, maxLinksToCheckPerPage.
extract_text_from_image: sources (required), quality (fast/accurate), includeLines (default false here), minConfidence (0.3/0.4/0.5/0.6/0.7/0.8), pdfMode (auto/ocr), maxPdfPages, pdfDpi.
lookup_domain: domains (required), includeWhois, includeDns, includeSsl, includeEmailSecurity.
extract_video_frames: videoUrls (required), mode (auto/scenes/count/interval), frameCount, intervalSeconds, maxFramesPerVideo, sceneThreshold (0.15/0.2/0.3/0.4/0.5), imageFormat (jpg/png/webp), maxWidth, contactSheet.
download_images: urls (required), maxImagesPerPage, minWidth, minHeight, minFileSizeKb, allowedFormats, includeSvg, includeCssBackgrounds, includeIcons, convertTo (original/jpg/png/webp), maxDimension, dedupe.
check_domain_authority: domains (required).
enrich_company: companies (required), includeWebsite, includeWikidata, maxConcurrency.
upscale_image: imageUrls (required), scale (4/2), model (general/anime), outputFormat (jpeg/png/webp), quality, allowLargeImages.
get_topic_trends: keywords (required), language, timeRange (past7Days/past30Days/past90Days/past12Months/past5Years/all/custom), startDate, endDate, granularity (auto/daily/weekly/monthly), includeRedirects, includeLanguages, maxLanguages, platform (all-access/desktop/mobile-web/mobile-app).
get_trending_topics: trendingCountries, trendingProjects, trendingDate, maxTrending, platform (all-access/desktop/mobile-web/mobile-app).
check_website_traffic_rank: domains (required), includeCountries.
search_free_images: queries (required), maxResultsPerQuery, license (any/commercialNoShareAlike/noAttribution), minWidth, minHeight, orientation (any/landscape/portrait/square), fileTypes, thumbnailWidth, excludeRestricted, language.
Each call returns two text blocks: a short human-readable summary (results, failures, cost) and compact JSON with every result item (empty fields dropped, very long text truncated at KANTO_MAX_TEXT_CHARS).
Environment variables
Variable | Default | Purpose |
| - (required) | Your Apify API token. |
|
| Default spending cap per call. |
|
| Default timeout per call (max 300). |
|
| Truncate any single text field (e.g. a long document's Markdown) beyond this. |
| bundled file | Path to an alternative |
Adding actors
Tools are generated from actors.config.json: the Apify actor ID, the tool description, typed parameters, price (with optional per-result price rules and a per-result charge count for actors that bill several events per row), input defaults, and a one-line summary template. Adding an actor is a config entry, no code. comingSoon: true marks an actor that is not public on the Apify Store yet (the tool is listed with a notice and a 404 is explained); fixedInput pins actor input for a tool (one actor can back several tools). npm run build regenerates the tool table above and manifest.json from the config.
Development
npm install
npm run build
npm test # offline: lists tools, checks the missing-token error
APIFY_TOKEN=... npm run test:live # one tiny real call per tool (about $0.04)
npx @modelcontextprotocol/inspector node dist/index.js # interactive inspector
npm run bundle # builds build/kanto-labs-mcp.mcpbPrivacy
The server runs on your machine and talks only to api.apify.com. The URLs and domains you pass are processed by the actors on Apify; see each actor's page on the Apify Store. Your token is sent only to Apify and is never logged.
License
MIT - see LICENSE.
Available Tools
14 toolsaudit_website_seoAudit website SEOARead-only
Run an on-page SEO audit: 0-100 score and a prioritized list of issues (title, meta description, headings, canonical, indexability, structured data, Open Graph, images without alt, speed, robots.txt, sitemap, llms.txt and AI-crawler blocking), with optional broken-link checking and an internal crawl. Use it when asked to audit, review or improve a site's SEO, or to compare pages. Cost: $0.004 per page audited, billed to your Apify account; unreachable pages are free. Crawling multiplies cost: pages = urls x maxPagesPerSite at most. Runs the Apify actor kantolabs/website-seo-audit with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Pages or domains to audit, e.g. ["https://www.python.org"]. | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| maxPagesPerSite | No | 1 (default) audits only the listed URLs. Higher values crawl internal links up to this many pages per start URL; each page is charged. | |
| checkBrokenLinks | No | Request every link on each audited page and report 4xx/5xx/unreachable ones. Slower. Default false. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). | |
| maxLinksToCheckPerPage | No | Upper bound on link checks per page when checkBrokenLinks is on. Default 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds critical behavioral context beyond that: it costs $0.004 per page billed to an Apify account, unreachable pages are free, crawling multiplies cost, and maxTotalChargeUsd caps spend. It also mentions it runs an Apify actor with APIFY_TOKEN and synchronous timeouts. This fully discloses the cost and execution side-effects, going well beyond the annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but well organized: it opens with the core function, then usage triggers, then cost and execution details. Every sentence adds value. It is longer than a single sentence but justified given the cost model and crawling behavior. It is front-loaded with the primary purpose, so an agent can quickly decide if it is the right tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, no output schema, and cost implications, the description is remarkably complete. It covers the input (URLs), the optional behaviors (broken links, crawl), the output (0-100 score and issue list), the cost model, and the spending cap. An agent has everything needed to decide whether to call it and how to set parameters responsibly. The lack of an output schema is mitigated by the explicit description of the return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all six parameters. The description adds valuable semantics: it explains that maxPagesPerSite defaults to 1 and that higher values crawl internal links, each page charged; it explains checkBrokenLinks as 'optional broken-link checking'; and it ties cost to pages. This enriches the schema meaning without redundancy. A small gap is not elaborating on maxLinksToCheckPerPage, but the schema does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Run'), a precise resource ('on-page SEO audit'), and enumerates the exact checklist (title, meta, headings, canonical, indexability, structured data, Open Graph, images, speed, robots.txt, sitemap, llms.txt, AI-crawler blocking) plus optional broken-link checking and crawling. It also gives explicit triggers ('when asked to audit, review or improve a site's SEO, or to compare pages'), clearly distinguishing it from sibling tools like check_domain_authority or check_website_traffic_rank.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('Use it when asked to audit, review or improve a site's SEO, or to compare pages'). It does not explicitly name alternative tools or exclusions, but the purpose is clear enough and the description adds cost guidance (unreachable pages free, crawling multiplier, spending cap) that helps an agent decide whether to invoke it. A slight gap is not naming sibling tools for contrast, but this is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_domain_authorityCheck domain authority (coming soon)ARead-only
COMING SOON: this Kanto Labs actor is not public on the Apify Store yet. Until it is, calls return an 'actor not yet public' error and nothing is charged. Score how authoritative (well linked) domains are: a 0-100 authority score computed from the open Common Crawl domain web graph of about 133 million domains, with the harmonic-centrality rank, PageRank rank, top-% percentile, number of subdomains seen, and the rank change and trend (up/down/stable/new) against the previous monthly graph. Accepts domains, URLs or email addresses; each is reduced to its registrable domain. Use it for link-building and outreach prospect lists, guest-post or PR vetting, expired-domain research, lead scoring and competitor tracking. It is its own open metric, NOT Moz Domain Authority or Ahrefs Domain Rating: compare domains against each other. It does not return backlinks and visits no website. Domains outside the top 12 million come back with ranked=false (score below 20) and are free. Thousands of domains finish in seconds. Cost: $0.001 per domain scored, billed to your Apify account; unranked and invalid domains are free. Runs the Apify actor kantolabs/domain-authority-checker with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | Yes | Domains, URLs or email addresses, e.g. ["stripe.com", "https://www.nytimes.com/section/world", "ceo@shopify.com"]. Reduced to the registrable domain; duplicates are removed. | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds far richer behavioral context: current 'coming soon' status and error behavior, cost per domain, free unranked/invalid domains, performance expectations ('thousands of domains finish in seconds'), the underlying Apify actor and APIFY_TOKEN requirement, and the maxTotalChargeUsd hard cap. Nothing contradicts the annotations; the description exceeds the transparency burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long (~250 words) and front-loads the critical 'coming soon' status and error/charge behavior, then moves through definition, use cases, exclusions, and pricing in a logical order. Nearly every sentence adds a distinct piece of information, but there is slight redundancy (e.g., maxTotalChargeUsd is already described in the schema) and the text could be tightened without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description enumerates the return values in prose: authority score, harmonic-centrality rank, PageRank rank, top-% percentile, subdomain count, and rank change/trend, plus the ranked=false state for unranked domains. It also covers input constraints, cost, timeout, availability, and response behavior, giving an agent sufficient context to invoke the tool and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description enriches the parameters by explaining input normalization to registrable domains, duplicate removal, the ranked=false threshold (score below 20), and cost/spend-cap semantics tied to maxTotalChargeUsd. It does not add JSON syntax details, but it adds meaningful behavioral meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Score') and precisely defines the resource and output: a 0-100 authority score computed from the Common Crawl web graph. It further distinguishes itself by stating it is an independent open metric, NOT Moz Domain Authority or Ahrefs Domain Rating, and clarifies that it does not return backlinks or visit websites. Even without naming sibling tools, it is behaviorally unique and clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases: 'Use it for link-building and outreach prospect lists, guest-post or PR vetting, expired-domain research, lead scoring and competitor tracking.' It also gives negative guidance ('does not return backlinks and visits no website'), which tells an agent when not to choose it. However, it never names alternative sibling tools or states 'if you need X, use Y', so it stops short of full tool-selection routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_website_traffic_rankCheck website traffic rank (coming soon)ARead-only
COMING SOON: this Kanto Labs actor is not public on the Apify Store yet. Until it is, calls return an 'actor not yet public' error and nothing is charged. How popular is a website, worldwide and by country? From published open data (Chrome UX Report popularity ranks, CC BY 4.0, and the Majestic Million, CC BY 3.0): the global Chrome popularity tier (top 1K, 5K, 10K, 50K, 100K, 500K or 1M websites), month-over-month trend, the countries where the site ranks best and its tier in each of 40 countries, plus Majestic rank, referring subnets and IPs (a backlink-strength signal) and an overall popularityTier. Use it for lead scoring, competitor and market research, vetting publishers, affiliates or link-building targets, and market sizing by country. It gives tiers, not exact positions or monthly visit counts, and does not visit the websites. Sites below the top 1M everywhere and not in the Majestic Million come back ranked=false and are free. Cost: $0.002 per domain ranked, billed to your Apify account; unranked and invalid domains are free. Runs the Apify actor kantolabs/website-traffic-rank with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | Yes | Domains, URLs or subdomains, e.g. ["canva.com", "https://www.zalando.de/", "shop.lego.com"]. A subdomain is judged on its own, then falls back to the main site. | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| includeCountries | No | Add the full per-country tier list (countryRanks). topCountries is always included. Default true. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations (readOnlyHint=true, destructiveHint=false). It discloses the 'coming soon' status and its error behavior, the fact that it does not visit websites, the ranked=false outcome for unranked domains, cost per domain, and the spending cap behavior. This is rich behavioral context that an agent needs to handle calls correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence conveys necessary information. It is well-structured: it begins with the critical 'coming soon' caveat, then explains the tool's purpose, data sources, outputs, use cases, limitations, and cost. It is not concise in word count, but it is efficient in packing value without redundancy, earning a 4 rather than a 3.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 parameters and no output schema, the description does a thorough job of covering what an agent needs: it describes the output fields (countryRanks, topCountries, ranked=false), error behavior, cost, and how parameters affect results (includeCountries flag). It even notes the behavior for subdomains and timeout handling. The description is complete for correct invocation and expectation setting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter has a description. The tool description adds extra meaning beyond the schema: it explains subdomain fallback behavior, the default for maxTotalChargeUsd with a server setting, and advises splitting batches to avoid timeout. This adds practical guidance not present in the schema, elevating the value above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: checking website traffic ranks and popularity tiers. It specifies the resource (websites) and the verb (check), and details exactly what it outputs (global tier, country tiers, Majestic rank, etc.). It also distinguishes itself from alternatives by noting it gives tiers, not exact positions or monthly visit counts, and that it does not visit websites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists use cases: lead scoring, competitor and market research, vetting publishers, affiliates, link-building targets, and market sizing by country. It also sets expectations for when results are free (ranked=false) and notes the tool's limitation (tiers, not exact numbers), implying alternative tools are needed for exact data. This is helpful, though it does not explicitly name sibling tools as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_document_to_markdownConvert document to MarkdownARead-only
Download documents from public URLs and convert them to clean Markdown: PDF, DOCX, PPTX, XLSX/XLS, CSV, EPUB, HTML, IPYNB, MSG, TXT, JSON, XML, RSS and ZIP archives of these. Returns the Markdown plus title, page and word counts, and optional heading-aware chunks for RAG / vector databases. Use it when you need to read, summarize, quote or index a document that is only reachable by link. Cost: $0.004 per document converted, billed to your Apify account; unsupported or failed files are free. Runs the Apify actor kantolabs/document-to-markdown with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| chunkSize | No | Split each document into heading-aware chunks of about this many characters for embeddings. Default 0 (no chunking). | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| chunkOverlap | No | Characters repeated between consecutive chunks. Default 150. | |
| documentUrls | Yes | Direct links to documents, e.g. ["https://arxiv.org/pdf/1706.03762"]. Links without a file extension work; the type is detected from the file itself. | |
| maxFileSizeMb | No | Skip (and do not charge) files larger than this. Default 50. | |
| includeMarkdown | No | Return the full Markdown text. Default true; set false when only chunks are needed. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: cost per document, unsupported/failed files being free, execution via the Apify actor with APIFY_TOKEN, and the maxTotalChargeUsd spending cap. These operational side effects are not inferable from readOnlyHint or openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well organized: function and formats, return value, use case, then cost and execution details. Every sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the return values: Markdown, title, page and word counts, and optional chunks. It also covers cost, failure behavior, and batch limits, giving the agent enough context to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mostly restates schema content such as chunking, file-type detection, and the spend cap rather than adding genuinely new parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action: download documents from public URLs and convert them to clean Markdown, followed by a concrete list of supported formats. This separates it from sibling tools like download_images or extract_text_from_image by focusing on document-to-Markdown conversion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use it when you need to read, summarize, quote or index a document that is only reachable by link.' It does not name explicit alternatives or when-not conditions, but none of the sibling tools competes directly with this conversion task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_website_tech_stackDetect website tech stackARead-only
Detect the technologies a website runs on: CMS, ecommerce platform, JavaScript frameworks, analytics and ad tags, CDN, hosting, payment and marketing tools (7,600+ fingerprints, with versions and confidence). Use it for lead qualification, competitor research, sales prospecting or 'what is this site built with?' questions. Reads only the public page, one request per site. Cost: $0.003 per website analyzed, billed to your Apify account; failed or unreachable sites are free. Runs the Apify actor kantolabs/website-tech-stack-detector with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Domains or full URLs to analyze, e.g. ["shopify.com", "https://example.com/pricing"]. Duplicates are removed. | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| minConfidence | No | Only report technologies detected with at least this confidence (%). Default 50; 0 returns every weak guess. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). | |
| includeDescriptions | No | Add a one-paragraph description of each technology (larger output). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses significant runtime behavior: it 'Runs the Apify actor kantolabs/website-tech-stack-detector with your APIFY_TOKEN,' defines the per-site cost of $0.003, states 'failed or unreachable sites are free,' and explains that maxTotalChargeUsd is a hard spending cap. This gives the agent a clear picture of side effects, cost, and failure handling that annotations alone do not convey. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is multi-sentence and somewhat lengthy, but every sentence carries information: purpose, fingerprint count, use cases, read-only nature, cost, actor name, token, and spending cap. It is front-loaded with the core purpose, then details. It could be tightened (e.g., merging cost and actor lines), but it is not bloated or redundant. Minimum viable conciseness for the richness of information provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description adequately explains what the tool returns: 'technologies ... with versions and confidence.' It covers the full lifecycle: what it detects, when to use it, safety (read-only), cost, failure behavior, and execution mechanism (actor and token). The 5 parameters are all described in the schema, and the description adds usage nuance like batching. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents each parameter with defaults and constraints. The description adds value beyond the schema by explaining the cost model tied to urls ($0.003 per site), the billing to Apify account, and the purpose of maxTotalChargeUsd as a 'hard spending cap.' These operational details are not in the schema and help the agent reason about cost and limits. Baseline 3, but the extra context justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'Detect the technologies a website runs on' and enumerates the categories (CMS, ecommerce, frameworks, analytics, ad tags, CDN, hosting, payment, marketing tools). It explicitly positions it against sibling tools by noting its niche ('website tech stack' detection) and mentions concrete use cases like lead qualification and competitor research, making the tool unmistakably distinct from audit_website_seo, check_website_traffic_rank, and similar siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states specific scenarios: 'Use it for lead qualification, competitor research, sales prospecting or "what is this site built with?" questions.' It also provides operational guidance: 'Reads only the public page, one request per site,' warns about cost, and even recommends splitting large batches in the timeoutSecs parameter. Though alternatives aren't named, the use cases are explicit and sufficient for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_imagesBulk download images (coming soon)ARead-only
COMING SOON: this Kanto Labs actor is not public on the Apify Store yet. Until it is, calls return an 'actor not yet public' error and nothing is charged. Download every image from web pages (img tags, srcset, lazy-load attributes, CSS backgrounds, optionally favicons and SVGs) and/or from direct image links, with size and format filters, de-duplication and optional conversion or resizing. Each saved image gets a public download URL plus its dimensions, format, alt text and SHA-256. Use it to collect product photos, gallery or article images, or to re-host and convert a list of image links. Only for images you have the right to use; social networks and stock-photo sites are refused. Cost: $0.002 per image saved, billed to your Apify account; duplicates, filtered-out and failed images are free. A page can hold hundreds of images, so set maxImagesPerPage and minWidth to control cost. Runs the Apify actor kantolabs/bulk-image-downloader with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Web page URLs (all images on the page) and/or direct image links, mixed freely, e.g. ["https://books.toscrape.com/"]. | |
| dedupe | No | Save (and charge) the same picture found at several URLs only once. Default true. | |
| minWidth | No | Skip (free) images narrower than this in px. 200+ drops icons, avatars and thumbnails. Default 0. | |
| convertTo | No | Keep original files (default) or convert every image to one format. | |
| minHeight | No | Skip (free) images shorter than this in px. Default 0. | |
| includeSvg | No | Also save SVG files (logos, icons). Default false. | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| includeIcons | No | Also collect favicons and touch icons. Default false. | |
| maxDimension | No | Downscale images whose longest side exceeds this in px. 0 (default) keeps the original size. | |
| minFileSizeKb | No | Skip (free) files smaller than this. Default 2, which removes tracking pixels. | |
| allowedFormats | No | Keep only these formats. Omit to keep all raster formats. | |
| maxImagesPerPage | No | Stop after this many images from one page. Default 200. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). | |
| includeCssBackgrounds | No | Also collect CSS background images (hero banners, sliders). Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses critical behavioral facts beyond annotations: the actor is not yet public and calls currently return an error with no charge, billing is $0.002 per saved image, duplicates/filtered/failed images are free, and maxTotalChargeUsd caps spend. It also warns about legal use rights and refused sources. Annotations are not contradicted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense but well-organized paragraph that front-loads the most important fact (coming soon, not callable yet) before capabilities, use cases, restrictions, cost, and invocation details. It is slightly long, but justified given 14 parameters and no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 14 parameters and no output schema, the description explains not only invocation but also the return value (public download URL, dimensions, format, alt text, SHA-256), cost model, legal constraints, and runtime limits. Nothing essential for an agent to decide whether and how to call it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter in detail. The description adds useful cross-parameter guidance, e.g. 'A page can hold hundreds of images, so set maxImagesPerPage and minWidth to control cost', and clarifies the cost implications of parameters like dedupe and filters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Download every image from web pages... and/or from direct image links', with concrete details on sources (img tags, srcset, lazy-load, CSS backgrounds) and processing (filters, de-duplication, conversion/resizing). It clearly distinguishes this bulk-download tool from sibling tools like search_free_images or extract_text_from_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit use cases: collecting product photos, gallery/article images, or re-hosting/converting image links. It also provides exclusions ('social networks and stock-photo sites are refused') and practical guidance on cost control. It doesn't name sibling alternatives explicitly, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enrich_companyEnrich company profiles (coming soon)ARead-only
COMING SOON: this Kanto Labs actor is not public on the Apify Store yet. Until it is, calls return an 'actor not yet public' error and nothing is charged. Turn domains, website URLs, email addresses or company names into company profiles. From one normal visit to the company's homepage: name, description, logo and favicon URLs, brand colour, language, the company's own social profile links (LinkedIn, X, Facebook, Instagram, YouTube, GitHub...), App Store / Google Play links and key pages (about, pricing, careers, contact, blog, docs). From Wikidata (open data): industries, country, headquarters, founding date, employee count and revenue (with the year of each figure), stock tickers, parent organization, legal form and LEI. Use it for CRM or lead-list enrichment, account research before a sales call, logo walls, market maps, or 'tell me about this company' questions. Names are matched on Wikidata (well-known organizations only); pass a domain for an exact match. Small businesses usually get the website fields only. Returns no personal data (no people, emails or phone numbers). Cost: $0.003 per company enriched, billed to your Apify account; unreachable domains, unknown names and invalid inputs are free. Runs the Apify actor kantolabs/company-enrichment with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| companies | Yes | One company per item: a domain ("stripe.com"), a website URL, an email address or a company name ("Siemens"). Duplicates are removed. | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| includeWebsite | No | Read the company's homepage (logo, socials, apps, key pages). Default true. | |
| maxConcurrency | No | Companies processed in parallel. Default 10. | |
| includeWikidata | No | Firmographics from Wikidata (industry, HQ, founded, employees, revenue, ticker). Default true. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond annotations, disclosing the current 'coming soon' error state, zero-charge behavior until public, per-enrichment cost, free cases (unreachable domains, unknown names, invalid inputs), use of the Apify actor with APIFY_TOKEN, and the maxTotalChargeUsd safety cap. It also states a privacy guarantee (no personal data), which annotations do not cover. No contradiction with readOnlyHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but information-dense; it front-loads the time-sensitive 'coming soon' caveat, then follows a logical flow from purpose to output fields to cost and auth. Some redundancy with schema (e.g., spend cap) but most sentences earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a tool of this complexity, the description covers input types, output categories, matching limitations, cost, auth, and safety cap. It addresses free and charged cases and the current non-public status, leaving no critical gap for an agent deciding whether and how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive parameter comments, but the description enriches semantics by clarifying that names only match well-known organizations on Wikidata and that domains give exact matches. It also explains cost implications of maxTotalChargeUsd, adding decision-relevant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the core transformation ('Turn domains, website URLs, email addresses or company names into company profiles') and enumerates specific outputs from website and Wikidata, making the purpose unmistakable. It differentiates from sibling domain-analysis tools (lookup_domain, check_domain_authority) by focusing on company profile enrichment rather than standalone technical or SEO metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases (CRM enrichment, sales research, market maps) and input guidance ('pass a domain for an exact match'; 'small businesses usually get the website fields only'). It doesn't name alternative tools or state when not to use it, but the context is clear enough for an agent to choose appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_text_from_imageExtract text from images (OCR)ARead-only
OCR: extract the text from images, screenshots, photos and scanned PDFs reachable by URL (PNG, JPG, WEBP, TIFF, BMP, GIF, HEIC, PDF). Returns reading-order text per image or PDF page with an average confidence, and optionally every line with its pixel bounding box. Reads English and other Latin-script languages, Chinese and Japanese; PDFs that already contain a text layer are read exactly without OCR. Use it for receipts, invoices, forms, scanned documents, screenshots and product photos when you need the words in the image, not a description of it. For digital (non-scanned) PDFs and Office files prefer convert_document_to_markdown. Cost: $0.003 per image or PDF page read ($0.008 with quality "accurate"), billed to your Apify account; failed downloads and pages with no text are free. Runs the Apify actor kantolabs/image-to-text-ocr with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| pdfDpi | No | Render resolution for scanned PDF pages. Default 200; use 300 for small print. | |
| pdfMode | No | "auto" (default) uses a PDF page's own text layer when present and OCRs only scanned pages; "ocr" always runs OCR. | |
| quality | No | "fast" (default, $0.003/page) is right for screenshots, documents and Latin-script text. "accurate" ($0.008/page, about 4x slower) is better for Japanese, dense Chinese, stylized fonts and poor photos. | |
| sources | Yes | Direct links to images or PDF files, e.g. ["https://example.com/receipt.jpg", "https://example.com/scan.pdf"]. Each image and each PDF page is one charged result. | |
| maxPdfPages | No | Read only the first N pages of each PDF (each page is charged). Default 50. | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| includeLines | No | Also return every text line with its confidence and pixel box [x0, y0, x1, y1] (much larger output; useful for tables or finding a value next to a label). Default false. | |
| minConfidence | No | Drop text lines recognized below this confidence. Default "0.5"; use "0.3" for very poor scans. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, but the description adds substantial behavior beyond that: it runs an Apify actor, requires APIFY_TOKEN, has per-page billing, enforces a spending cap, and treats PDFs with text layers differently. It even notes failed downloads and empty pages are free. No contradiction with annotations; this is rich, honest disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but densely informative, front-loaded with the core function before cost and backend details. Every sentence earns its place—formats, languages, alternatives, billing, and token usage are all relevant. It is structured logically, though a touch verbose for agents that prefer brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explains the return value ('reading-order text per image or PDF page with an average confidence, and optionally every line with its pixel bounding box'). It covers cost, failure cases, input limits, and batching advice, making it fully sufficient for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter has a basic description. The tool description adds meaningful context: it ties quality to cost, explains that each image/PDF page is one charged result, clarifies pdfMode behavior, and warns about output size for includeLines. This goes beyond the schema without duplicating it, though it doesn't explicitly walk through every parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb ('extract the text'), a clear resource (images, screenshots, photos, scanned PDFs), and the exact return (reading-order text with confidence, optional bounding boxes). It also names the sibling it is not ('For digital (non-scanned) PDFs and Office files prefer convert_document_to_markdown'), so an agent can distinguish it from similar tools immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('receipts, invoices, forms, scanned documents, screenshots and product photos') and when not to ('digital (non-scanned) PDFs and Office files'), naming the alternative tool. It also adds practical guidance on cost and batching, leaving no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_video_framesExtract frames from videos (coming soon)ARead-only
COMING SOON: this Kanto Labs actor is not public on the Apify Store yet. Until it is, calls return an 'actor not yet public' error and nothing is charged. Extract still frames from video files reachable by direct URL (MP4, MOV, WEBM, MKV, AVI, M4V, MPEG-TS; not YouTube or TikTok pages): an automatic storyboard of scene changes, scene cuts only, N evenly spaced frames, or one frame every N seconds. Returns public image URLs with timestamps for every frame, a free contact-sheet grid image, and the video's duration, resolution, fps and codecs. Use it to let a vision model 'watch' a video, to make thumbnails or storyboards, or to find scene changes. A call must finish within 300 seconds, so send one or a few short videos per call. Cost: $0.002 per frame extracted (default 12 frames per video = $0.024), billed to your Apify account; videos that fail to download or decode are free. Runs the Apify actor kantolabs/video-frame-extractor with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "auto" (default): first frame + strongest scene changes, topped up with evenly spaced frames to frameCount. "scenes": only real cuts (up to maxFramesPerVideo). "count": exactly frameCount evenly spaced frames. "interval": one frame every intervalSeconds (up to maxFramesPerVideo). | |
| maxWidth | No | Scale frames down to this width in px (0 = original). Default 1280, plenty for vision models. | |
| videoUrls | Yes | Direct links to video files, e.g. ["https://media.w3.org/2010/05/sintel/trailer.mp4"]. | |
| frameCount | No | Frames per video in auto and count modes. Default 12. Each frame is charged. | |
| imageFormat | No | Frame image format. Default jpg. | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| contactSheet | No | Also build one grid image of all frames with timecodes (free). Default true. | |
| sceneThreshold | No | Scene-change sensitivity (lower finds subtler changes). Default "0.3". | |
| intervalSeconds | No | Seconds between frames in interval mode. Default 10. | |
| maxFramesPerVideo | No | Upper limit per video in scenes and interval modes. Default 50. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly and non-destructive; the description adds cost per frame, free failed videos, an error when the actor isn't public, and the 300-second timeout. These go beyond annotation fields and give accurate expectations for invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but every sentence carries value: the 'coming soon' warning is front-loaded, followed by supported formats, modes, outputs, use cases, constraints, and cost. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers input constraints (direct URLs, formats, exclusions), output (image URLs, timestamps, contact sheet, metadata), cost model, error behavior, and timeout. With 11 parameters and no output schema, this is comprehensive enough for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter. The description mentions the default frame count and cost, but doesn't add syntax or format beyond what the schema provides; the 'not YouTube/TikTok' note is helpful but already implied by 'direct URL'. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States exactly what it does: extracts still frames from video files via direct URL, lists supported formats and exclusions (YouTube/TikTok), enumerates output (image URLs, timestamps, contact sheet, metadata), and gives use cases. It clearly distinguishes from sibling tools, which are unrelated to video.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides use cases ('let a vision model watch a video, make thumbnails or storyboards, find scene changes') and exclusions ('not YouTube or TikTok pages'). It also advises on batch size due to the 300-second limit, which helps an agent decide when to call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_topic_trendsGet topic interest over time (coming soon)ARead-only
COMING SOON: this Kanto Labs actor is not public on the Apify Store yet. Until it is, calls return an 'actor not yet public' error and nothing is charged. Measure and compare interest in topics over time, like Google Trends, from official Wikipedia pageview data (human traffic, 2015-07-01 to yesterday, CC0). Each keyword is matched to one Wikipedia article (exact title first, else the top non-disambiguation search hit; the matched article is returned so you can check it; write "Apple Inc." for the company, "apple" gives the fruit). Per topic: a daily, weekly or monthly timeline with absolute views and a 0-100 value normalised across all keywords of the call, total and average views, peak date, latest value, change percent and trend (rising/stable/falling), spike days, and interest by language edition. Use it for 'is interest in X growing?', comparing brands, products, people or technologies, seasonality, or finding the day a story broke. It counts people reading about a topic, not Google searches, and has no per-city data. About 5-10 s for 3 keywords and about a minute for 10 keywords over 12 months, so send up to about 30 keywords per call. Cost: $0.003 per topic analyzed, billed to your Apify account; keywords with no matching article are free. Runs the Apify actor kantolabs/wikipedia-trends with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | Custom end date, YYYY-MM-DD. Default yesterday (UTC). | |
| keywords | Yes | Topics to compare on one scale: keywords ("bitcoin"), exact article titles ("Apple Inc.") or Wikipedia URLs. | |
| language | No | Wikipedia language edition used to match keywords: en (default), de, fr, es, ja, pt, it, ru, zh, pl, nl, ko... | |
| platform | No | Devices counted. Default all-access. | |
| startDate | No | Custom start date, YYYY-MM-DD (earliest 2015-07-01). | |
| timeRange | No | Period to analyse. Default past90Days. "all" = 2015-07-01 to yesterday. Ignored when startDate or endDate is set. | |
| granularity | No | Timeline resolution. "auto" (default) = daily up to 3 months, weekly up to about 2 years, monthly beyond. | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| maxLanguages | No | How many of the largest language editions to include. Default 10. | |
| includeLanguages | No | Add interest by language edition. Default true; false is faster. | |
| includeRedirects | No | Add views of titles that redirect to the article (old names, spellings) so a renamed topic does not start from zero. Default true. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, it discloses that the actor is not yet public, calls currently return an actor-not-yet-public error and are not charged, billing is 0.003 per topic, unmatched keywords are free, runtime is roughly 5-10 seconds for 3 keywords and about a minute for 10, and maxTotalChargeUsd caps spend. This is excellent behavioral context that annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense and well organized: status warning, core function, matching rules, output summary, use cases, limitations, performance, and cost. The coming-soon warning is front-loaded, which is appropriate for an actor that currently returns an error. A few billing and runtime details could be tightened, so it is not a perfect 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still summarizes the result shape: per-topic daily/weekly/monthly timeline, absolute views, normalized 0-100 value, totals, peak date, latest value, change percentage, trend, spike days, and language edition breakdown. It also covers data source, date range, matching, cost, runtime, current status, and limitations, making the definition complete enough for accurate selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all 12 parameters, so the baseline is 3. The description adds genuinely useful semantics for keywords: each keyword is mapped to one article, exact title first, otherwise the top non-disambiguation hit, and the matched article is returned. It also adds operational guidance like sending up to about 30 keywords per call despite the schema allowing 50.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: measure and compare interest in topics over time from Wikipedia pageview data. It also distinguishes itself from the likely sibling get_trending_topics by emphasizing historical timelines and positioning the tool as Google Trends for Wikipedia. 'Over time' clearly separates it from a simple current-trends tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit use cases such as checking whether interest in X is growing, comparing brands/products/people, seasonality, and finding when a story broke. It also states what this tool is not: it counts pageviews, not Google searches, and has no per-city data. It does not explicitly name a sibling alternative for current trending topics, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trending_topicsGet trending topics (coming soon)ARead-only
COMING SOON: this Kanto Labs actor is not public on the Apify Store yet. Until it is, calls return an 'actor not yet public' error and nothing is charged. List what people are reading about on a given day: the most-read Wikipedia articles per country (US, GB, IN, DE, JP... readers in that country; views rounded up to the nearest 100 by Wikimedia) and/or per language edition (exact views), with rank, views and a one-line description. Main pages, search and special pages are removed. Data comes from the official Wikimedia Pageviews API (CC0) and is published about one day later, so the default day is the latest published one (usually yesterday). Use it for news and social monitoring, content ideas, or 'what is trending in Japan today?'. If neither trendingCountries nor trendingProjects is given, the English edition is listed. Cost: $0.0005 per trending article returned, billed to your Apify account; lists that fail or have no data yet are free. Runs the Apify actor kantolabs/wikipedia-trends with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Devices counted. Default all-access. | |
| maxTrending | No | Articles per list. Default 25. Each is charged. | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| trendingDate | No | Day to list, YYYY-MM-DD. Default: the latest published day. | |
| trendingProjects | No | Wikipedia language editions, e.g. ["en", "de", "ja"]. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). | |
| trendingCountries | No | Two-letter country codes, e.g. ["US", "GB", "IN"]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly discloses behavior beyond the annotations: the tool is not public yet and returns an error, calls are billed per returned article, failed/no-data lists are free, data comes from Wikimedia Pageviews with rounding differences, there is a one-day publication delay, and maxTotalChargeUsd caps spending. This far exceeds what the readOnlyHint and destructiveHint annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries useful information: availability status, data scope, source, use cases, defaults, pricing, and execution details. The coming-soon caveat is front-loaded. A slight structural split into availability, behavior, and billing would improve readability, but the density is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description covers what is returned (rank, views, one-line description), default behavior, error cases, cost, API source, and execution constraints. For a tool with seven optional parameters and billing implications, this is unusually complete and leaves little ambiguity for an agent deciding whether and how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter. The description adds meaningful semantics beyond the schema: the default day is the latest published day, the English edition is listed if neither country nor project is provided, and maxTotalChargeUsd acts as a hard spend cap. This justifies a score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: listing most-read Wikipedia articles by country and/or language edition, with rank, views, and descriptions. It is specific about the data source and scope, but it does not explicitly distinguish itself from the sibling tool 'get_topic_trends', so differentiation relies on context rather than a direct statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete use cases ('news and social monitoring, content ideas, or 'what is trending in Japan today?') and explains the default behavior when no trendingCountries or trendingProjects are provided. However, it does not explicitly state when to use this tool instead of an alternative or when not to use it, aside from the implied 'coming soon' unavailability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_domainLook up domain WHOIS, DNS, SSL and email securityARead-only
One report per domain: registration data via RDAP/WHOIS (registered or available, registrar, creation and expiry dates, domain age, status, nameservers, DNSSEC), all DNS records (A, AAAA, MX, NS, TXT, CAA, SOA, www), the SSL certificate (valid, issuer, expiry, days left, SANs, TLS version) and email security (SPF, DKIM, DMARC, MTA-STS, detected email provider, 0-100 score and A-F grade), plus a plain-English list of issues. Accepts domains, URLs or email addresses. Use it for 'who is the registrar / when does it expire / is this domain available / is the certificate valid / who hosts their email / is DMARC set up' questions, lead enrichment and domain or certificate monitoring. No registrant personal data is returned. Cost: $0.003 per domain analyzed, billed to your Apify account; invalid domains and failed lookups are free. Runs the Apify actor kantolabs/domain-whois-dns-ssl-lookup with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | Yes | Domains, URLs or email addresses, e.g. ["stripe.com", "https://www.shopify.com/pricing", "ceo@example.org"]. Each is reduced to its registrable domain; duplicates are removed. | |
| includeDns | No | DNS records. Default true. | |
| includeSsl | No | SSL certificate check on port 443. Default true. | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| includeWhois | No | Registration data (RDAP/WHOIS). Default true. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). | |
| includeEmailSecurity | No | SPF/DKIM/DMARC report with score and grade. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and destructiveHint=false already in annotations, the description goes well beyond by disclosing the cost model ('$0.003 per domain analyzed, billed to your Apify account; invalid domains and failed lookups are free'), the privacy constraint ('No registrant personal data is returned'), and the technical implementation (runs the Apify actor kantolabs/domain-whois-dns-ssl-lookup with APIFY_TOKEN, maxTotalChargeUsd caps spend). These are behavioral traits the annotations do not carry and that materially affect how an agent should invoke the tool. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place: purpose is front-loaded (report contents), then usage guidance, then the cost and privacy constraints, then technical details. The structure is logical and front-loaded with the highest-value information first. It could arguably be tightened, but no sentence is filler given the cost and security implications of this tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool (7 parameters, 5 report sections, billing implications) with no output schema, so the description must carry the burden of explaining the return value. It does: the return format is described in detail (registration fields, DNS record types, SSL fields, email security score/grade, plain-English issue list). The cost model, privacy constraint, timeout behavior, and input normalization are all covered. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the billing context that makes maxTotalChargeUsd actionable (an agent can estimate spend: 1000 domains × $0.003 = $3) and by describing the full report structure that the include* booleans toggle. It also clarifies input flexibility ('Accepts domains, URLs or email addresses') beyond the schema's bare array of strings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('look up') and a well-scoped resource (domain WHOIS, DNS, SSL, email security) and enumerates the exact data returned: registration data via RDAP/WHOIS, all DNS record types, SSL certificate details, and email security with score/grade. This specificity clearly differentiates it from siblings like check_domain_authority (authority score) and detect_website_tech_stack (tech stack detection), so an agent can pick it correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use-case guidance: "Use it for 'who is the registrar / when does it expire / is this domain available / is the certificate valid / who hosts their email / is DMARC set up' questions, lead enrichment and domain or certificate monitoring." This is clear when-to-use context. However, it never states when NOT to use it or names alternative sibling tools, leaving exclusions to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_free_imagesSearch free-to-use images (coming soon)ARead-only
COMING SOON: this Kanto Labs actor is not public on the Apify Store yet. Until it is, calls return an 'actor not yet public' error and nothing is charged. Find pictures you may legally reuse: searches the 100M+ freely licensed files on Wikimedia Commons through the official MediaWiki API and returns only images under free licenses that allow commercial use (public domain, CC0, CC BY, CC BY-SA...). Each image comes with the full-size original URL, a thumbnail URL, the file page, width, height, orientation, license, license family, whether attribution or share-alike is required, the author, a ready-to-paste attribution line (text and HTML), community quality marks and any extra restrictions (trademarks, personality rights). Filter by license ("noAttribution" = public domain/CC0 only, "commercialNoShareAlike" = PD/CC0/CC BY), minimum size, orientation and file type. Use it for article featured images, product or slide visuals, maps, flags, diagrams, historical photos and licensed image datasets. Works best for concrete subjects (animals, food, places, objects, events); abstract stock concepts return fewer matches, so search for the concrete scene. Not legal advice: follow each image's license. Cost: $0.001 per image returned, billed to your Apify account; filters apply before charging and a search with no match is free. Runs the Apify actor kantolabs/free-image-search with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| license | No | "any" (default): every free license. "commercialNoShareAlike": public domain, CC0 and CC BY only. "noAttribution": public domain and CC0 only (no credit needed). | |
| queries | Yes | Search terms, one per item, e.g. ["golden retriever puppy", "tokyo skyline night"]. English works best. | |
| language | No | Preferred language for titles and descriptions, e.g. en (default), de, fr, ja. | |
| minWidth | No | Minimum width in px. Default 0 (any). | |
| fileTypes | No | Formats to include. Default ["jpg", "png", "webp"]; use ["svg"] for maps, flags, icons and diagrams. | |
| minHeight | No | Minimum height in px. Default 0 (any). | |
| orientation | No | Default any. | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| thumbnailWidth | No | Width of thumbnailUrl in px. Default 800. imageUrl is always the full original. | |
| excludeRestricted | No | Skip files with trademark, personality-rights or insignia restrictions (recommended for ads). Default false. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). | |
| maxResultsPerQuery | No | Images per search after filters. Default 20. Each is charged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, the description discloses critical behaviors: the current 'coming soon' error state, '$0.001 per image returned' with filters applied before charging, no charge on no-match searches, execution as 'the Apify actor kantolabs/free-image-search with your APIFY_TOKEN', and the maxTotalChargeUsd spending cap. This is rich context that annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-organized and front-loaded: the 'COMING SOON' warning leads, followed by purpose, output details, filters, use cases, caveats, legal note, and cost. Each sentence contributes value, though a few license-related details repeat information already in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 12 parameters and no output schema, the description fully compensates by enumerating all returned fields (full-size URL, thumbnail, file page, dimensions, license family, attribution requirements, author, attribution line, quality marks, restrictions), plus cost, error behavior, filters, and legal advice. Nothing an agent needs to call or interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds slight interpretive value by explaining license tiers ('noAttribution' = PD/CC0 only, 'commercialNoShareAlike' = PD/CC0/CC BY) and file-type use cases, but most of that is also present in the schema descriptions. No substantial new parameter meaning is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb+resource: 'searches the 100M+ freely licensed files on Wikimedia Commons through the official MediaWiki API' and states the exact deliverable (images under free licenses with legal reuse details). This clearly distinguishes it from sibling download_images and other unrelated tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear use cases ('article featured images, product or slide visuals, maps, flags, diagrams, historical photos') and a practical caveat ('abstract stock concepts return fewer matches, so search for the concrete scene'). It does not explicitly name alternative tools or exclusion conditions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upscale_imageUpscale images with AI (coming soon)ARead-only
COMING SOON: this Kanto Labs actor is not public on the Apify Store yet. Until it is, calls return an 'actor not yet public' error and nothing is charged. Enlarge images 2x or 4x with Real-ESRGAN, the open-source AI super-resolution model, run inside the actor (no third-party AI API): sharper edges and textures, less blur and JPEG noise than a normal resize. Two models: "general" for photos, product shots, screenshots and scans; "anime" for anime, cartoons, illustrations, logos and line art. Transparency is kept. Returns a public download URL for each upscaled file with input and output dimensions. Use it to make small product photos, thumbnails or artwork print- or store-ready, or to enlarge small text before OCR. Inputs up to about 0.3 megapixels (640x480) are standard price (output up to 2560x1920 at 4x); bigger inputs are reduced to that size unless allowLargeImages is true, which upscales inputs up to about 2.1 MP (1920x1080) at full size at the large price. Upscaling takes about 12 s per standard image and about 80 s per large one, and a call must finish within 300 s, so send at most about 15 standard or 3 large images per call. Only images you have the right to process; social-network and stock-photo links are refused. Cost: $0.01 per image upscaled, $0.06 per large image, billed to your Apify account; failed or refused images are free. Runs the Apify actor kantolabs/ai-image-upscaler with your APIFY_TOKEN; maxTotalChargeUsd caps the spend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | "general" (default) for photos and real-world images; "anime" for anime, cartoons, illustrations and line art. | |
| scale | No | Upscale factor, "4" (default) or "2". Same price. | |
| quality | No | JPEG / WEBP quality. Default 95. | |
| imageUrls | Yes | Direct links to images (JPEG, PNG, WEBP, GIF first frame, BMP, TIFF; up to 40 MB), e.g. ["https://example.com/product-small.jpg"]. | |
| timeoutSecs | No | Give up after this many seconds (max 300, Apify's limit for synchronous runs). Default 280. For big batches, split the input into several calls. | |
| outputFormat | No | "jpeg" (default, smallest for photos), "png" (lossless, keeps transparency) or "webp" (small, keeps transparency). | |
| allowLargeImages | No | Upscale inputs up to ~2.1 MP at full size and charge the large price ($0.06). Default false: bigger inputs are first reduced to ~0.3 MP and charged $0.01. | |
| maxTotalChargeUsd | No | Hard spending cap for this call in USD, enforced by Apify: the run stops once it has charged this much. Default 1 (server setting KANTO_MAX_CHARGE_USD). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: the actor is currently non-public and returns an error, pricing per image, call duration limits, max batch sizes, output URL details, transparency handling, and the APIFY_TOKEN requirement. This fully compensates for the lack of output schema and aligns with the non-destructive readOnlyHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense, with the 'coming soon' caveat front-loaded before the core functionality. Every section earns its place: purpose, model choice, output behavior, pricing, limits, and constraints. It is not minimal, but the complexity of the tool justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema, the description is remarkably complete. It covers current unavailability, cost, failure behavior, timeout constraints, input restrictions, output format, and return shape (public download URLs with dimensions). An agent has enough context to decide whether and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 100%, the description adds meaningful semantics beyond individual parameter descriptions: standard vs large pricing, input megapixel thresholds, output dimensions at 4x, and guidance on batching (15 standard or 3 large images). Not every parameter is explained in the prose, but the key operational implications are covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Enlarge images 2x or 4x with Real-ESRGAN...' and explains the effect (sharper edges, less blur and JPEG noise). It also distinguishes two model variants and output behavior, so an agent can clearly tell what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases: 'make small product photos, thumbnails or artwork print- or store-ready, or to enlarge small text before OCR.' It also explains when larger inputs require allowLargeImages and notes that social-network and stock-photo links are refused, giving clear context without explicitly naming alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
14 tool updates
v1.2.0- First observed
audit_website_seo - First observed
check_domain_authority - First observed
check_website_traffic_rank - First observed
convert_document_to_markdown - First observed
detect_website_tech_stack - First observed
download_images - First observed
enrich_company - First observed
extract_text_from_image - First observed
extract_video_frames - First observed
get_topic_trends - First observed
get_trending_topics - First observed
lookup_domain - First observed
search_free_images - First observed
upscale_image
TDQS
Scored across 14 tools
Each tool targets a distinct resource and action, and descriptions are detailed enough to separate them. The closest call is get_topic_trends vs get_trending_topics, which both use Wikipedia pageviews but measure different things; check_domain_authority vs check_website_traffic_rank also share a domain-ranking flavor. No two tools are truly interchangeable.
All 14 tools follow a clean verb_noun snake_case pattern (detect_website_tech_stack, upscale_image, lookup_domain). Commands use imperative verbs and the object is always a noun or noun phrase. Minor phrasing differences like convert_document_to_markdown vs download_images don't break the overall consistency.
14 tools is at the upper edge of the typical well-scoped range, and each represents a distinct utility. The set feels like a grab-bag of Kanto Labs Apify actors rather than a tightly integrated product, but none of the tools are redundant. Slightly broad, still reasonable for a general web-research and media toolkit.
Nine of the 14 tools are explicitly marked 'COMING SOON' and return an 'actor not yet public' error, leaving only five functional tools. That is a significant gap: agents will select valid-sounding tools for video, image, company, and trend tasks and hit dead ends. The available five cover website tech/SEO/domain/document/OCR well, but the server's advertised surface is largely unusable.
Maintenance
Related MCP Connectors
Direct access to 60+ scraping and search tools. Extract structured data from Google (Search, Maps, Trends), Amazon, Airbnb, Social Media, and any web page directly into your AI agent.
Web search, browser automation, scraping, crawling and CAPTCHA solving for AI agents.
Web tools for AI agents: scrape pages to Markdown, audit SEO, detect tech stacks, check sitemaps
AI agent tools: web search, browser, 400+ LLMs, image gen, TTS, phone verify. Pay-per-use.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to use Apify Actors as tools to perform specific tasks like web scraping, data extraction, and searching across various platforms through the Model Context Protocol.11,433 npmApache 2.0
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to thousands of Apify Actors for web scraping, data extraction, and automation tasks, with dynamic tool discovery to find and use any Actor from the Apify Store in real time.11,433 npmMIT
- AlicenseBqualityDmaintenanceEnables AI assistants to interact with the Apify platform to manage actors, monitor runs, and retrieve scraped data from datasets. It supports natural language commands for executing web scrapers, managing tasks, and accessing key-value stores.28MIT
- FlicenseNot gradedqualityDmaintenanceProvides AI agents with real-time web capabilities including live search results, markdown web scraping, business lead generation, and detailed company information. It enables agents to bypass knowledge cutoffs by accessing current web data through a monetized Apify Actor.-