Adaga solutions — Data APIs Toolbox
Server Details
13 pay-per-event data APIs for local-business and web intelligence: local presence audit (Google Business Profile + reviews + AI-readiness), Google Maps scraper, review radar and review pitch generator, TikTok, Instagram, YouTube and LinkedIn scrapers, RAG web browser, France fuel prices, hotel rate monitoring, and a free AEO/AI visibility checker.
- Status
- Healthy
- Uptime
- 99.9% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 13 tools
The set contains a cluster of five tools around Google Maps/local business/reviews (aeo_ai_visibility_checker, google_maps_scraper, local_presence_audit, review_pitch_generator, review_radar) with overlapping data sources, though their scopes (website-only, bulk, deep audit, pitch, monitoring) are distinct. The descriptions explicitly disambiguate, but the overlap could still cause misselection.
All tool names use snake_case and follow a consistent descriptive noun-phrase pattern (e.g., brand_source_action), with no mixing of conventions. The style is predictable throughout.
13 tools is within the ideal 3-15 range, and each tool covers a distinct data source or action. The count is well-scoped for a multi-API toolbox.
The toolbox is broad but incomplete: no Twitter/X, Facebook, or Reddit scrapers, no general web search, no full review extraction, and fuel prices only for France. These are notable gaps for a general 'Data APIs Toolbox'.
Available Tools
13 toolsaeo_ai_visibility_checkerAInspect
Check any WEBSITE's AI visibility with a 7-criteria technical AEO audit: JSON-LD, llms.txt, AI bots in robots.txt and more. Use when you need to know if a site can be cited by ChatGPT, Perplexity or Claude — returns a 0-7 score with exact fixes plus a generated llms.txt draft. This audits ONLY the website (no Google Business Profile data, no reviews): use local_presence_audit instead when you need the full local-business picture (GBP + reviews + website) with a /100 score and sales deliverables. FREE — no per-run charge. Auth: Apify API token required (Authorization: Bearer) even though the actor itself is free. Rate limit: 60 calls/min/IP on this facade; full report returned in one response, no pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL of the site to audit (e.g. https://example.lu). The checker fetches the homepage, /llms.txt and /robots.txt. | |
| generateLlmsTxt | No | Also generate a ready-to-publish llms.txt draft for the audited site (delivered in the dataset and in the key-value store as llms.txt). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: it discloses pricing (FREE, no per-run charge), auth requirements (Apify token via Bearer), rate limits (60 calls/min/IP), and return shape (0-7 score, fixes, llms.txt draft, full report in one response, no pagination). This is above the bar expected for an unannotated read tool.
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 purpose and the key alternative are front-loaded in the first two sentences, and the trailing operational facts (pricing, auth, rate limit, no pagination) are compressed into short clauses. It is dense but nearly every clause carries actionable information; a minor trim of the pricing/auth restatement would tighten it further.
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?
No output schema or annotations exist, yet the description compensates fully: it explains the return value (0-7 score plus fixes and an llms.txt draft), scope boundaries, the sibling alternative, auth, rate limits, and response shape. An agent has everything needed to call and interpret this tool.
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% and both parameters are well documented in the schema itself. The description reinforces behavior (fetching homepage, /llms.txt, /robots.txt; generating an llms.txt draft) but adds no syntax or format detail beyond what the schema already provides, so the baseline 3 applies.
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 (Check) and resource (a website's AI visibility) and enumerates the 7-criteria AEO audit contents (JSON-LD, llms.txt, AI bots in robots.txt). It explicitly distinguishes itself from the sibling local_presence_audit, so an agent can route correctly without opening either schema.
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 an explicit when-to-use trigger ('when you need to know if a site can be cited by ChatGPT, Perplexity or Claude') and a hard exclusion with an alternative: 'This audits ONLY the website... use local_presence_audit instead when you need the full local-business picture'. The when/when-not/alternative triad is fully covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api_breaking_change_radarAInspect
Monitor public APIs and detect breaking changes by diffing OpenAPI specs and classifying changelogs — a radar for the APIs you depend on. Use when you need early warning before an API change breaks your integration. Returns change events classified by severity. Pricing: $0.50 per run + $0.005 per API checked.
| Name | Required | Description | Default |
|---|---|---|---|
| apis | Yes | List of APIs to watch. For type 'openapi', url must point to a raw OpenAPI spec (JSON or YAML). For type 'github-releases', url must be 'owner/repo' or a GitHub repo URL. For type 'rss', url must be an RSS/Atom changelog feed. | |
| dryRun | No | When true, the actor performs the full detection but does NOT charge any pay-per-event fee. Use for testing your configuration. | |
| maxApis | No | Safety cap on the number of APIs processed in one run. | |
| webhookUrl | No | POST endpoint called at the end of each run with a JSON summary (counts by class + top critical changes). Slack/Discord/Teams incoming-webhook compatible payload is included. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does meaningful work: it discloses the pricing model ($0.50/run + $0.005/API), the return shape (change events classified by severity), and the underlying mechanisms (oasdiff diffing vs rule-based classification). It does not explicitly state read-only/safety characteristics, but the monitoring framing makes mutation risk clear.
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?
Four compact sentences that front-load the purpose before moving to usage, return, and cost. The 'radar for the APIs you depend on' phrase is mild flavor but earns its place as shorthand; nothing is wasted overall.
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?
No output schema exists, so the description usefully summarizes the return as severity-classified change events, and it discloses pricing, which annotations do not cover. For a 4-parameter monitoring tool with full schema coverage, this is nearly complete.
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 all four parameters (apis, dryRun, maxApis, webhookUrl) are already fully documented in the schema. The description adds no syntax or format detail beyond what the schema provides, so the baseline of 3 applies.
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: monitors public APIs and detects breaking changes by diffing OpenAPI specs and classifying changelogs. Clearly distinguishable from all siblings, which are unrelated scrapers and checkers.
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 names the triggering condition: 'Use when you need early warning before an API change breaks your integration.' Sibling tools are unrelated, so no alternative routing is needed, but it offers no when-not to run guidance (e.g. no-change cost considerations).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
france_fuel_pricesAInspect
Get live fuel prices for about 10,000 gas stations across France (official open data, Hermès Revenu API). Use when comparing fuel prices, estimating route costs or building price datasets for France. Returns station objects with prices per fuel type. Pricing: $0.20 per run + $0.01 per 1k stations.
| Name | Required | Description | Default |
|---|---|---|---|
| carburant | No | Filtrer par type de carburant | |
| departement | No | Filtrer par code département (ex: '75' pour Paris, '69' pour Lyon). Laissez vide pour toute la France. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the data origin (official open data), the return shape (station objects with prices per fuel type), and the cost model ($0.20 per run + $0.01 per 1k stations). It omits any auth or rate-limit detail, leaving a small gap.
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?
Four tight sentences: purpose, usage, return shape, pricing – each front-loaded and earning its place. No filler or redundancy.
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?
No output schema exists, but the description explains the return unit (station objects with per-fuel prices) and the cost per call. Combined with 100% schema coverage for params, an agent has nearly everything, though auth and pagination behavior remain unstated.
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 both parameters (carburant, departement) are already fully documented in the schema with enums and examples. The description adds no parameter-level meaning beyond what the schema provides, so the baseline 3 applies.
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 ('Get live fuel prices'), names the geographic scope (France), the coverage (~10,000 stations) and the data source (Hermès Revenu API). An agent knows exactly what this returns without opening the schema.
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: comparing fuel prices, estimating route costs, building price datasets for France. No sibling tool overlaps (the others are scrapers/audits), so no alternative routing is needed, but there is no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_maps_scraperAInspect
Extract local business data from Google Maps IN BULK: names, addresses, phones, ratings, review counts, websites, GPS coordinates — up to 100 businesses per call (refine the query for narrower results). Use when you need lead lists, competitor maps or market research across a city or search query — i.e. MANY businesses as raw data, with no scoring or audit. Use local_presence_audit instead when you need a deep scored audit of ONE business (GBP + reviews + website AI-readiness + deliverables); use review_radar instead to detect only NEW reviews on businesses you already track. Returns an array of business objects, everything in one response (no pagination; truncated beyond 100 items). Auth: Apify API token required (Authorization: Bearer). Rate limit: 60 calls/min/IP on this facade. Pricing: $1.00 per run + $0.03 per business scraped.
| Name | Required | Description | Default |
|---|---|---|---|
| queries | No | Array of search queries to scrape. Use this for multiple searches in one run. | |
| language | No | Language code for Google Maps results (e.g., 'fr', 'en', 'de', 'es') | fr |
| maxResults | No | Maximum number of businesses to extract per query | |
| maxReviews | No | Maximum number of reviews to extract per business | |
| searchQuery | No | What to search on Google Maps (e.g., 'restaurants Paris', 'plumbers London', 'hotels New York') | |
| includeReviews | No | Whether to extract user reviews for each business | |
| proxyConfiguration | No | Proxy settings. Residential proxies are recommended for Google Maps. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: return shape (array of business objects, everything in one response, no pagination, truncated beyond 100 items), auth requirement (Apify API token via Authorization: Bearer), rate limit (60 calls/min/IP on this facade), and pricing ($1.00 per run + $0.03 per business scraped). This is unusually rich disclosure for a scraper.
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?
Front-loaded with purpose and scope, then usage routing, then operational facts (auth, rate limit, pricing) — a sensible order with no filler. It is dense and runs long, but nearly every clause carries information an agent needs; the only fat is the parenthetical alternative list, which is still 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?
No output schema exists, and the description compensates by describing the return value (array of business objects, single response, truncation at 100 items). Combined with auth, rate-limit and pricing disclosure, an agent has everything needed to call it correctly and predict the cost.
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 all 7 parameters are already documented, which sets the baseline at 3. The description adds the extracted-field list and the advice to 'refine the query for narrower results', but says nothing about the queries vs. searchQuery distinction, maxReviews, language, or proxyConfiguration beyond what the schema states.
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 (Extract) and resource (local business data from Google Maps) and enumerates the exact fields returned (names, addresses, phones, ratings, review counts, websites, GPS coordinates) plus scope (up to 100 businesses per call). It explicitly names the two siblings it is not (local_presence_audit, review_radar), so an agent can route without opening either schema.
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?
Explicit when-to-use (lead lists, competitor maps, market research across a city or query — MANY businesses as raw data, no scoring or audit) and explicit when-not with named alternatives: local_presence_audit for a deep scored audit of ONE business, review_radar for detecting only NEW reviews on already-tracked businesses. The condition selecting each alternative is spelled out, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hotel_rate_monitoringAInspect
Monitor hotel rates across booking sources for revenue management. Use when tracking competitor hotel pricing or building rate intelligence. Returns rate observations per hotel and date. Micro-pricing per event.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that this is a read-style monitoring operation returning observations per hotel and date, which establishes the safety profile implicitly. It omits which booking sources, data freshness, rate limits, and auth requirements — meaningful gaps for a no-annotation tool.
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?
Four short sentences with the primary purpose front-loaded and no filler. The closing fragment "Micro-pricing per event." is cryptic and undefined, weakening an otherwise tight structure.
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?
No output schema exists, so the description must frame the return value; it does say "rate observations per hotel and date," which is the minimum. But with no parameters, no annotations, and no explanation of sources, coverage or cadence, and the unexplained "micro-pricing per event" clause, an agent still lacks enough to invoke with confidence.
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 tool declares zero parameters, so there is nothing for the description to disambiguate; the baseline for a 0-param tool is 4. The description's mention of hotels, dates, and sources is conceptual rather than parameter-level detail.
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 (monitor) and resource (hotel rates) plus scope (across booking sources) and audience (revenue management). No sibling tool overlaps with hotel pricing, so differentiation is implicitly strong, though the description never anchors itself against the scraper/review 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?
"Use when tracking competitor hotel pricing or building rate intelligence" gives a clear triggering context. However, it names no alternatives or exclusions, so an agent gets no routing guidance for the adjacent scrapers or review_radar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instagram_scraperAInspect
Scrape Instagram profiles and hashtag posts: followers, posts, engagement metrics. Use when vetting influencers, monitoring brands or tracking competitors on Instagram. Returns profile objects with recent posts. Pricing: $0.01 per profile scraped.
| Name | Required | Description | Default |
|---|---|---|---|
| profiles | Yes | List of Instagram usernames to scrape (without @). Example: ["nasa", "cristiano"] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden, and it does add real behavioral value: it discloses the return shape ('profile objects with recent posts') and a cost model ('$0.01 per profile scraped'), which an agent needs in order to budget calls. It omits rate limits, runtime/latency expectations, and failure modes, so it is not complete for a scraper with zero structured safety 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?
Three sentences, each earning its place: what it scrapes, when to use it, and what it returns plus cost. The purpose and scope are front-loaded and there is 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?
There is no output schema and no annotations, so the description must carry more weight, and it does cover purpose, use cases, returned shape and pricing. It leaves gaps around rate limiting, pagination or result limits, and error behavior for a network-scraping tool, but nothing essential to invoking the single required parameter 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% and there is only one parameter, so the schema already explains the profiles list and its format. The description adds no format detail and actually introduces a 'hashtag posts' capability the parameter does not expose, which slightly muddies rather than clarifies parameter meaning. 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?
The description gives a specific verb and resource ('Scrape Instagram profiles and hashtag posts') plus the concrete fields returned ('followers, posts, engagement metrics'), and the Instagram scope implicitly separates it from tiktok_scraper, youtube_scraper and linkedin_profile_scraper. It falls short of 5 because the 'hashtag posts' claim is not backed by the input schema, which only accepts a profiles array, leaving the agent unsure whether hashtags are actually supported.
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 names clear use cases ('vetting influencers, monitoring brands or tracking competitors on Instagram'), which is well above the implied-usage bar. It stops short of 5 because it never states when not to use it or explicitly names a sibling alternative (e.g., for non-profile content on another platform).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_profile_scraperAInspect
Extract public LinkedIn profile data with this scraper: name, headline, experience, company. Use when enriching B2B leads or doing recruiting research on LinkedIn. Returns structured profile objects. Pricing: $0.02 per profile scraped.
| Name | Required | Description | Default |
|---|---|---|---|
| profileUrls | Yes | List of LinkedIn profile URLs to scrape (e.g., ['https://www.linkedin.com/in/williamhgates/']) | |
| includeSkills | No | Whether to extract the skills section | |
| includeExperience | No | Whether to extract work experience details |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral burden, and it does disclose key operational facts: it targets public profiles only and states a concrete pricing model ($0.02 per profile scraped). It omits other important behavior like rate limits, failure/partial-result handling, or auth requirements.
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?
Three short sentences, front-loaded with what the tool does, then usage, then cost. Efficient and scannable with negligible waste, though the pricing sentence is appended rather than integrated.
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 purpose, usage, and the notable pricing behavior for a simple 3-param extraction tool with no output schema. It lacks return-shape detail and failure/limit behavior, but is sufficient for an agent to invoke it 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% and each parameter (profileUrls, includeSkills, includeExperience) is fully documented in the schema, so the baseline is 3. The description adds no syntax or format detail beyond what the schema already provides.
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 (Extract) plus resource (public LinkedIn profile data) and enumerates the fields returned (name, headline, experience, company). It is immediately distinguishable from its sibling scrapers (instagram_scraper, tiktok_scraper, youtube_scraper) by naming the target platform explicitly.
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 clear use contexts ('enriching B2B leads', 'recruiting research'), which tells the agent when the tool is relevant. It does not, however, name alternatives or state exclusions (e.g., non-public profiles, rate limits), so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
local_presence_auditAInspect
Deep audit of ONE local business's online presence in a single run: Google Business Profile data (rating, review count, category, contact), recent reviews with urgency classification and owner-response detection, website AI-readiness scan (llms.txt, JSON-LD, robots.txt AI-crawler rules), a transparent presence score /100, and ready-to-use deliverables (publishable llms.txt, LocalBusiness JSON-LD, AI-drafted review responses, prioritized action plan). Use when you need the FULL picture on one specific business — e.g. before selling it marketing services, or to check whether ChatGPT, Perplexity and Gemini can 'see' it. Use google_maps_scraper instead when you need a raw LIST of many businesses (no audit); use aeo_ai_visibility_checker instead when you only need the free website-only technical check (no Google Business data, no reviews); use review_radar instead for ongoing monitoring that flags only NEW reviews over time. Auth: Apify API token required (Authorization: Bearer). Rate limits: 60 calls/min/IP on this facade; results capped at 100 items per call, no pagination. Pricing: $1.00 per run + $0.50 per business audited.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Business name + city used to find its Google Maps profile (e.g. 'Boulangerie Paul Mersch' or 'restaurant Esch-sur-Alzette'). The first, most relevant place is audited. Optional if websiteUrl alone is enough for you. | |
| dryRun | No | When true, the actor runs fully but skips all pay-per-event charges. Use it for testing and integration QA. | |
| language | No | Google Maps interface language code (fr, en, de...). Affects localized labels parsing. | fr |
| maxReviews | No | Number of most recent Google reviews to scrape and classify (urgency detection, owner-response check). Between 1 and 30. | |
| websiteUrl | No | Full URL of the business website (e.g. https://example.lu). Scanned without a browser for AI-readiness: JSON-LD structured data, LocalBusiness schema, meta description, H1, Open Graph, /llms.txt, and robots.txt rules for AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot). | |
| proxyConfiguration | No | Apify proxy settings. Residential proxies are strongly recommended — Google Maps blocks datacenter IPs. Defaults to RESIDENTIAL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so: it discloses the required Apify auth scheme (Authorization: Bearer), rate limits (60 calls/min/IP), the 100-item cap with no pagination, and the pricing model ($1.00 per run + $0.50 per business audited). It also explains that the website is scanned 'without a browser', which tells the agent the scan is passive. This is unusually rich disclosure for a no-annotation tool.
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?
It is front-loaded: purpose first, then the trigger, then sibling routing, then operational constraints. The first sentence is very dense with a long deliverables list, and the auth/rate/pricing tail is compact but adds bulk. Efficient overall, though the opening could be trimmed slightly.
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 and no annotations, so the description must cover purpose, routing, outputs and operations — and it does all four, even enumerating the concrete deliverables (llms.txt, LocalBusiness JSON-LD, AI-drafted review responses, action plan). An agent has everything needed to decide and invoke 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 schema already documents all six parameters (query, dryRun, language, maxReviews, websiteUrl, proxyConfiguration) in detail. The description adds no parameter-level syntax or semantics beyond what the schema provides, so the baseline 3 applies.
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 opening sentence names a specific verb+resource ('Deep audit of ONE local business's online presence in a single run') and enumerates exactly what the audit covers: Google Business Profile data, reviews, website AI-readiness, a /100 score, and deliverables. It is immediately distinguishable from every sibling because it explicitly contrasts itself with google_maps_scraper, aeo_ai_visibility_checker and review_radar.
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 states the positive trigger ('before selling it marketing services', checking whether ChatGPT/Perplexity/Gemini can see it) and then names three alternatives with the exact condition that selects each: raw LIST of many businesses → google_maps_scraper; website-only technical check → aeo_ai_visibility_checker; ongoing monitoring of NEW reviews → review_radar. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rag_web_browserAInspect
Fetch web pages and convert them into clean LLM-ready text for RAG pipelines. Use when an agent needs readable page content from the web without HTML noise — a lightweight browser alternative for retrieval. Returns per-page cleaned text with metadata. Pricing: $0.003 per page crawled.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language code for search results (e.g. en, fr, de) | en |
| urls | No | Direct page URLs to extract content from (instead of searching). Example: ["https://example.com/article"] | |
| query | No | Google search query. Top results are fetched and extracted. Example: 'best crm software 2026' | |
| maxResults | No | Maximum number of search results / pages to process | |
| outputFormat | No | Content format: markdown (best for LLM/RAG) or plain text | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful traits: the return shape ('per-page cleaned text with metadata') and cost ('$0.003 per page crawled'). It omits operational details such as authentication requirements, error/partial-failure behavior, or latency expectations, which is the remaining gap.
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?
Three tight sentences with zero filler, front-loading what the tool does, then when to use it, then return shape and price. Each sentence earns its place and the important routing information comes first.
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?
No output schema exists, so the description rightly covers the return value, and it also notes cost. For a five-parameter tool with a dual query/urls mode, it is nearly complete, though it could say more about what happens when both query and urls are supplied or omitted.
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 every parameter is already documented in the schema, including the query-vs-urls distinction and the markdown/text enum. The description adds no parameter-level meaning beyond that, making the baseline 3 correct.
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 ('Fetch web pages and convert them into clean LLM-ready text') plus the delivery target ('RAG pipelines'). This clearly distinguishes it from the sibling scrapers, which are all platform-specific (instagram_scraper, youtube_scraper, etc.), while this one is the generic page-content fetcher.
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 a clear usage condition: 'Use when an agent needs readable page content from the web without HTML noise — a lightweight browser alternative for retrieval.' It frames the retrieval use case well but names no excluded cases and points to no alternative tool for adjacent needs (e.g. structured scraping), so an agent still infers the boundary against siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_pitch_generatorAInspect
Generate pre-sales reports from a business's worst Google Maps reviews: HTML report plus ready-to-send pitch. Use when doing agency outbound and you want to show prospects their visible bad reviews. Use review_radar instead to monitor for NEW reviews over time; use local_presence_audit instead for a full presence audit with score and marketing deliverables; use google_maps_scraper instead for raw bulk business lists. Returns pitch text and a shareable report URL per business. SIDE EFFECT: can email the pitch directly to prospects via your own SMTP account, but ONLY when you explicitly set sendApproval: true AND provide smtpUser/smtpPassword — with default settings it sends nothing and only generates reports. Outbound sends are rate-limited: max 5 emails per run (configurable), 20 s between sends, 20 emails/day global cap. Auth: Apify API token required (Authorization: Bearer). Facade rate limit: 60 calls/min/IP. Pricing: $0.25 per run + $0.10 per pitch generated.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | generate = scrape + pitch + delivery. check-engagement = IMAP reply watch only (no Maps scraping, runs even under Google rate-limit) | generate |
| query | No | Google Maps search, e.g. 'restaurants Esch-sur-Alzette' — takes the first maxPlaces results. Ignored if placeUrls is non-empty. | |
| dryRun | No | Testing mode: skips report publishing and billing events | |
| emailMap | No | Mapping place name or Maps URL -> recipient email for outbound delivery. Only used when sendApproval is true. | |
| smtpUser | No | Gmail address used to send reports (requires an app password). Secret input. | |
| vertical | No | Sector template for pitch/report: chr (hotels/restaurants), immobilier, sante, artisanat | chr |
| maxPlaces | No | How many prospects to analyze | |
| placeUrls | No | Google Maps place URLs (/maps/place/...) of the prospects to analyze | |
| sendApproval | No | Explicit approval gate: without it, NO email is ever sent (reports are generated only) | |
| smtpPassword | No | Gmail app password for the SMTP user. Secret input, never logged. | |
| worstThreshold | No | Reviews at or below this rating are included in the pitch report | |
| maxEmailsPerRun | No | Rate limit: maximum reports emailed in one run (plus 20s inter-send delay and a 20/day global cap) | |
| telemetryEndpoint | No | Base URL of our tracking receiver (e.g. https://track.example.com). Embeds an HMAC-signed 1px pixel in each HTML report; opens trigger CONVERSION_RECORDED. | |
| maxReviewsPerPlace | No | How many recent reviews to scan per business when looking for the worst | |
| proxyConfiguration | No | A residential proxy is strongly recommended — Google Maps blocks datacenter IPs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does so: it discloses the outbound email side effect, the exact gate (sendApproval:true plus smtpUser/smtpPassword), the default-safe behavior, three separate rate limits (5/run, 20s interval, 20/day), auth requirement, facade limit, and pricing. This is materially more than the schema exposes.
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?
One dense paragraph, front-loaded with purpose then alternatives then side effects then auth/pricing — a sensible priority order with no filler sentences. It is long, and the sendApproval gate is restated in both the description and the schema, which is mild redundancy rather than waste.
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 15-parameter tool with no annotations and no output schema, the description covers returns ('pitch text and a shareable report URL'), the destructive/outbound path, credentials, limits, and cost. The mode enum's two behaviors (generate vs check-engagement) are left entirely to the schema, which is the only real gap.
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, but the description adds semantics the schema states only locally — that maxEmailsPerRun is bounded by an inter-send delay and a global daily cap, and that the SMTP path only activates under an explicit approval gate. It adds value beyond the field-level text without fully re-documenting all 15 parameters.
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?
Starts with a specific verb+resource pair ('Generate pre-sales reports from a business's worst Google Maps reviews') and immediately distinguishes the output (HTML report plus ready-to-send pitch). It also names three sibling tools it is NOT (review_radar, local_presence_audit, google_maps_scraper), so an agent can route without opening a schema.
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?
Explicit when-to-use ('agency outbound... show prospects their visible bad reviews') and three explicit when-not cases with the alternative tool named for each. Nothing is left to inference about selection against siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_radarAInspect
Monitor Google Maps reviews and detect only NEW ones since previous runs (stateful tracking per business), with Bayesian urgency classification and optional Slack alerts — your reputation radar. Use when tracking review activity OVER TIME for businesses you already know. Use google_maps_scraper instead for one-shot bulk extraction of business data; use review_pitch_generator instead to turn existing bad reviews into a sales pitch and shareable report; use local_presence_audit instead for a one-time full presence audit. Returns review objects flagged isNew with urgency scores. Side effects: sends a Slack notification ONLY if you provide your own Slack webhook URL in the input — no messages are sent otherwise. Auth: Apify API token required (Authorization: Bearer). Rate limit: 60 calls/min/IP on this facade. Pricing: $0.25 per run + $0.01 per new review.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Google Maps search, e.g. 'restaurants Esch-sur-Alzette' — takes the first maxPlaces results. Ignored if placeUrls is non-empty. | |
| dryRun | No | Testing mode: skips Slack alerts, state writes, and billing events | |
| maxPlaces | No | How many businesses to monitor (from placeUrls or the search query) | |
| placeUrls | No | Google Maps place URLs (/maps/place/...) to monitor | |
| alertThreshold | No | New reviews with this rating or lower trigger a Slack alert | |
| slackConnector | No | MCP connector to your Slack workspace. Authorize once in Apify Console → Settings → Integrations. The Actor only sees a connector ID. Leave empty to skip alerts (dataset only). | |
| maxReviewsPerPlace | No | How many recent reviews to scrape per business | |
| proxyConfiguration | No | A residential proxy is strongly recommended — Google Maps blocks datacenter IPs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: it discloses stateful tracking across runs, conditional Slack side effects (only if the caller supplies a webhook/connector), required Apify auth, a 60 calls/min rate limit, and a pricing model. This is behavior an agent cannot infer from the schema.
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?
Front-loaded with purpose, then routing, then returns/side effects/auth/limits/pricing in scannable clauses. Dense but every sentence conveys a distinct operational fact; only the slogan 'your reputation radar' is 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?
For an 8-param stateful actor with no output schema and no annotations, the description covers everything needed to call it correctly: statefulness, dry-run availability, alerting precondition, auth, rate limit, pricing, and the return shape (review objects flagged isNew with urgency scores).
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 schema already documents query, maxPlaces, alertThreshold, dryRun, placeUrls, etc., and the baseline is 3. The description adds only marginal param context — the Slack-webhook-optionality and the isNew return flag — without restating the individual field meanings.
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 (monitor) and resource (Google Maps reviews) with a precise scope: only NEW reviews, stateful per business, with Bayesian urgency classification. It explicitly names the siblings it is not (google_maps_scraper, review_pitch_generator, local_presence_audit) and the condition that distinguishes each.
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?
Explicit when-to-use ('tracking review activity OVER TIME for businesses you already know') plus three named alternatives with the exact scenario each covers (one-shot bulk extraction, sales pitch from bad reviews, one-time presence audit). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_scraperAInspect
Scrape TikTok profiles and videos: follower counts, likes, video metadata and stats. Use when researching influencers, tracking social engagement or analyzing TikTok content. Returns profile and video objects. Pricing: $0.01 per profile + $0.002 per video.
| Name | Required | Description | Default |
|---|---|---|---|
| hashtags | No | List of hashtags to scrape trending videos from (without #) | |
| profiles | Yes | List of TikTok usernames or profile URLs to scrape (e.g., ['mrbeast', 'https://www.tiktok.com/@charlidamelio']) | |
| maxVideosPerProfile | No | Maximum number of videos to extract per profile |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does add genuine value beyond structured fields: explicit per-call pricing ($0.01/profile + $0.002/video) and the shape of the result objects. It omits auth/API-key requirements, rate limits, and how the required 'profiles' param interacts with the optional 'hashtags' mode.
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?
Three tight sentences, front-loaded with capability, then usage, then return shape, then cost. Nothing is padding — even the return-type sentence earns its place because there is 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?
With no output schema and no annotations, the description usefully covers returns, cost, and call context. The main omission is the profiles-vs-hashtags usage relationship, which an agent needs to invoke the tool correctly in hashtag-only scenarios.
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 all three parameters are already documented in the schema; baseline 3 applies. The description adds no param-level meaning, notably failing to clarify the apparent tension between the required 'profiles' field and the hashtag-only trending-videos use case.
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 (scrape) and resource (TikTok profiles and videos) and enumerates the data returned (follower counts, likes, video metadata and stats). The platform name alone distinguishes it from the instagram_scraper, youtube_scraper, and linkedin_profile_scraper 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?
"Use when researching influencers, tracking social engagement or analyzing TikTok content" gives clear triggering contexts. However it never states when NOT to use it and never names the sibling scrapers (instagram_scraper, youtube_scraper) as the alternatives for non-TikTok platforms, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_scraperAInspect
Scrape YouTube videos and channels: views, subscribers, metadata, descriptions. Use when researching content trends, analyzing creators or building YouTube datasets. Returns video and channel objects. Pricing: $0.002 per video scraped.
| Name | Required | Description | Default |
|---|---|---|---|
| videoUrls | No | YouTube video URLs or IDs to scrape. Supports youtube.com/watch, youtu.be, and /shorts/ formats. | |
| maxResults | No | Maximum number of results per search query (1-50) | |
| channelUrls | No | YouTube channel URLs to scrape. Supports @handle, /channel/, and /c/ formats. | |
| searchQueries | No | Search YouTube for videos matching these queries. Returns top results with full video data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses pricing ($0.002 per video scraped) and the shape of the return (video and channel objects), but says nothing about auth requirements, rate limits, quota limits, or error behavior for a paid third-party scraping service.
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?
Four short sentences, front-loaded with the action and the returned fields, then usage context and cost. Every sentence carries information; nothing is padded.
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 4-parameter read-only scraper with no output schema, the definition covers what it fetches, when to use it, its return type, and its cost. Remaining gaps (auth, rate limits, behavior when combining searchQueries with explicit URLs) are modest given the rich schema coverage.
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 all four parameters (videoUrls, channelUrls, searchQueries, maxResults) are already fully documented, including accepted URL formats and the 1-50 range. The description adds no parameter-level detail beyond it, making the baseline 3 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 a specific verb (scrape) and resource (YouTube videos and channels) and enumerates the data returned (views, subscribers, metadata, descriptions). The platform-specific framing cleanly distinguishes it from the platform siblings like tiktok_scraper and instagram_scraper.
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?
'Use when researching content trends, analyzing creators or building YouTube datasets' gives clear contextual triggers for selection. It does not name exclusions or say when a sibling scraper would be preferred, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Added
local_presence_audit
12 tool updates
- First observed
aeo_ai_visibility_checker - First observed
api_breaking_change_radar - First observed
france_fuel_prices - First observed
google_maps_scraper - First observed
hotel_rate_monitoring - First observed
instagram_scraper - First observed
linkedin_profile_scraper - First observed
rag_web_browser - First observed
review_pitch_generator - First observed
review_radar - First observed
tiktok_scraper - First observed
youtube_scraper
Related MCP Connectors
Scraping API for Google Search, Maps, Flights, Jobs, YouTube, LinkedIn, Trustpilot and more.
One key to 1,000+ paid data APIs: enrichment, SEO/SERP, scraping, places, news. Pay per call.
17 data tools in one MCP server, run on Apify: Google Shopping, Flights, Hotels, News, Images, Videos, Ads Transparency, Jobs and Trends; YouTube transcripts; AI visibility checks; Google Maps leads; App Store and Google Play reviews. Pay per result. Sign in with Apify (OAuth) or an API token.
Local business intel for AI agents: audits, lead scoring, tech stack, prospecting.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides AI agents with tools to detect website tech stacks, enrich company profiles, monitor sitemaps for new or changed URLs, check URL indexability, and retrieve EU fuel prices as clean JSON, billed per result.MIT

Monocrawl MCPofficial
AlicenseNot gradedqualityCmaintenanceEnables AI agents to retrieve live public data from 70+ platforms — profiles, posts, comments, transcripts, products, prices, reviews, listings, jobs, ads and search results — plus website crawls and live browser sessions through 650+ endpoints in one response format. Includes free cost previews, per-call credit caps, safe retries, refunded failures and scheduled monitoring.8 npm10MIT- AlicenseAqualityBmaintenanceEnables AI agents and assistants to extract data from social media, search engines, maps, e-commerce sites, and any other website by running thousands of ready-made scrapers, crawlers, and automation tools as callable tools, with OAuth-based connection and optional agentic payments.1130,525 npm2MIT
- AlicenseNot gradedqualityCmaintenance20-tool MCP server - production web-intelligence API gateway exposing 10 Website Intelligence + 7 Marketing APIs as 20 MCP tools over Streamable HTTP + stdio, with pay-per-call Solana USDC payments. 20 tools: URL-to-Markdown, metadata, technology detection, contact extraction, SEO audit, SSL, DNS, sitemaps, robots.txt, Google Maps reviews, AI company/website summaries, citation checking Cloud-hostMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.