# Epsimo Apify actors: full agent documentation > Every Epsimo actor on the Apify Store with its input schema, output fields, pricing and how to run it. Recorded from the public Apify API on 2026-10-18. Index: https://epsimo.org/llms.txt ## Overview - Apify actors: 8 ready-to-run scrapers and lead tools on the Apify platform (https://apify.com/quaking_pail). Pay per event with an Apify account and API token. - API Bridge: one REST and MCP API at https://tools.epsimo.org for company data (qualify, enrich, scrape, email discovery, French company registry). One key in the `x-token` header, credits per request. Actors in this file: - [AI Website Content Markdown Scraper](https://epsimo.org/actors/ai-website-content-markdown-scraper.md) (`quaking_pail/ai-website-content-markdown-scraper`) - [Linkedin Job Scraping](https://epsimo.org/actors/linkedin-job-scraping.md) (`quaking_pail/linkedin-job-scraping`) - [Google SERP Scraper](https://epsimo.org/actors/google-serp-scraper.md) (`quaking_pail/google-serp-scraper`) - [Ai SEO Content Curator](https://epsimo.org/actors/ai-seo-content-markdown-scraper.md) (`quaking_pail/ai-seo-content-markdown-scraper`) - [Google Serp Scraper Lead Finder](https://epsimo.org/actors/google-serp-scraper-lead-finder.md) (`quaking_pail/google-serp-scraper-lead-finder`) - [Website Contacts Crawler](https://epsimo.org/actors/contact-crawler.md) (`quaking_pail/contact-crawler`) - [AI Company URL Lead Qualify](https://epsimo.org/actors/ai-company-url-lead-qualify.md) (`quaking_pail/ai-company-url-lead-qualify`) - [Google Condensed SERP Scraper](https://epsimo.org/actors/google-condensed-serp-scraper.md) (`quaking_pail/google-condensed-serp-scraper`) ## Do not - Do not hardcode prices: read them on the Apify Store page before a large run. - Do not put the Apify token in shared URLs, prompts or logs; prefer the `Authorization` header. - Do not treat the output as verified: it is scraped from public pages and can be incomplete, outdated or wrong. ## How to run any actor - Get an Apify API token and keep it in `$APIFY_TOKEN`. - `POST https://api.apify.com/v2/acts/quaking_pail~/run-sync-get-dataset-items` with the input JSON as the body runs the actor and returns its dataset items. Send the token as `Authorization: Bearer $APIFY_TOKEN` (recommended) or as `?token=$APIFY_TOKEN` ([Apify API authentication](https://docs.apify.com/api/v2)). - Runs longer than 300 seconds return HTTP 408 on that endpoint; use the asynchronous [Run Actor endpoint](https://docs.apify.com/api/v2/act-runs-post) instead. The `maxTotalChargeUsd` query parameter caps the cost of a run ([reference](https://docs.apify.com/api/v2/act-run-sync-get-dataset-items-post)). - Through MCP: `https://mcp.apify.com?tools=quaking_pail/` loads one actor as a tool ([Apify MCP server](https://docs.apify.com/platform/integrations/mcp)). Client configuration (replace `` and `$APIFY_TOKEN`; without `headers` the client signs in with OAuth): ```json { "mcpServers": { "apify": { "url": "https://mcp.apify.com?tools=quaking_pail/", "headers": { "Authorization": "Bearer $APIFY_TOKEN" } } } } ``` This file is condensed. Each actor file at https://epsimo.org/actors/.md has the full README sections and both curl variants. ## AI Website Content Markdown Scraper ### What it does Crawl a website and get clean Markdown of each page's main content, with URL and title. Ready for LLMs, RAG, vector databases and AI agents. Headless Chrome, same-domain crawl, API access. README summary: https://epsimo.org/actors/ai-website-content-markdown-scraper.md ### Use cases and Limits From the actor README on the Apify Store. #### Use cases for website-to-Markdown conversion - Load a documentation site or help center into a vector database for a support chatbot. - Give an AI agent the readable text of a company's website. - Monitor content changes on competitor pages with a scheduled run. - Build a clean text corpus for summarisation or classification. #### How much will it cost to scrape a website to Markdown? You **pay only per result, no subscription** and no rental. One result is one page stored in the dataset. Pages that fail are not stored and not charged. A small standard Actor start event also applies. Current prices, including discounts on higher Apify plans, are on the **Pricing** tab. To keep costs predictable: - Set **Max URLs** to the number of pages you need. - Keep **Maximum Depth** at 1 unless you need deeper pages. - Set **Search Engine** to `None` to skip the discovery step. - Set a **maximum cost per run** in the run options. #### Tips for clean Markdown output - Start from a content-heavy page (docs, blog, help center) rather than a page full of login links. - Use a start URL on the final domain to skip a redirect. - Scraping several pages per run is more efficient than many single-page runs, because the browser starts once per run. - Search discovery depends on the search engine's results page and may add no pages. Your crawl from the start URLs works without it. #### FAQ, disclaimers and support ##### Is it legal to scrape website content? You should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. Respect each website's terms of service and robots.txt, and check copyright before reusing content. ##### Does it work on JavaScript-heavy sites? Pages are rendered in Chrome, so most JavaScript sites work. Sites that block bots or detect automation can still fail. ##### Why did I get fewer pages than Max URLs? The site has fewer internal links within **Maximum Depth**, or some pages failed to load. Raise the depth or add more start URLs. ##### How do I report a problem? Open an issue in the **Issues** tab with the run ID. If the Actor saved you time, a rating on the **Reviews** tab helps other users find it. ### Input | Name | Type | Required | Default | Allowed values / range | Description | |---|---|---|---|---|---| | `start_urls` | array | yes | `[{"url": "https://apify.com"}]` | - | List of URLs to start scraping from | | `max_depth` | integer | no | `1` | - | Depth to which to scrape | | `max_urls` | integer | no | `10` | - | Maximum number of URLs to retrieve | | `search_engine` | string | no | `"Google"` | `"Google"`, `"Bing"`, `"DuckDuckGo"`, `"None"` | The search engine used to discover extra pages on the same domain before crawling. Choose None to skip this step and only crawl from the start URLs (faster and cheaper). | ### Example input Built from the input schema prefill/default values (the actor publishes no example input). ```json { "start_urls": [ { "url": "https://apify.com" } ], "max_depth": 1, "max_urls": 10, "search_engine": "Google" } ``` ### Output Dataset: URLs and their titles. One item per row. | Field | Type | Description | |---|---|---| | `url` | string or null | URL of the scraped page, as it was requested | | `title` | string or null | Page title as shown in the browser tab | | `content` | string or null | Cleaned Markdown of the page's main content (whitespace collapsed, images, inline SVGs and cookie banners removed) | Dataset views: `titles` (URLs and their titles). ### Example output item Built from the `example` values of the dataset schema. ```json { "url": "https://example.com/about", "title": "About us | Example Company", "content": "## About us Example Company builds tools for small businesses." } ``` ### Pricing Pay per event, in effect since 2026-01-20 (as of 2026-10-18). Each event below is charged. | Event | Title | Description | Price USD (FREE tier) | |---|---|---|---| | `apify-default-dataset-item` | result (primary) | Single result in the default dataset. | $0.03 | Scheduled change from 2026-10-31: | Event | Title | Description | Price USD (FREE tier) | |---|---|---|---| | `apify-actor-start` | Actor Start (once per run) | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.00005 | | `apify-default-dataset-item` | Page (primary) | One result saved to the default dataset. | $0.03 | Plan-tier prices for `apify-default-dataset-item`: FREE $0.03, BRONZE $0.03, SILVER $0.027, GOLD $0.024, PLATINUM $0.024, DIAMOND $0.024. FREE-tier USD; tiered events can cost less on paid Apify plans; the Store page is authoritative. ### How to run ```bash curl -X POST "https://api.apify.com/v2/acts/quaking_pail~ai-website-content-markdown-scraper/run-sync-get-dataset-items" \ -H "Authorization: Bearer $APIFY_TOKEN" \ -H 'Content-Type: application/json' \ -d @input.json ``` `input.json` holds the example input above. The `?token=` variant and the 300-second limit: https://epsimo.org/actors/ai-website-content-markdown-scraper.md ### Apify MCP Server URL `https://mcp.apify.com?tools=quaking_pail/ai-website-content-markdown-scraper` (actor id `quaking_pail/ai-website-content-markdown-scraper`), with `Authorization: Bearer $APIFY_TOKEN`. Client configuration: see How to run any actor. ### Links - Apify Store: [quaking_pail/ai-website-content-markdown-scraper](https://apify.com/quaking_pail/ai-website-content-markdown-scraper) - Actor file: [ai-website-content-markdown-scraper.md](https://epsimo.org/actors/ai-website-content-markdown-scraper.md) - Sources: [actor API](https://api.apify.com/v2/acts/quaking_pail~ai-website-content-markdown-scraper), [build API](https://api.apify.com/v2/acts/quaking_pail~ai-website-content-markdown-scraper/builds/default) - Data fetched from the Apify API on 2026-10-18 - Build: 0.6.1 ### Do not See Do not at the top of this file. ## Linkedin Job Scraping ### What it does Scrape LinkedIn job listings by keyword and location: title, company, location, link and full job description. No login or cookies. De-duplicated, export to CSV/JSON or use the API. README summary: https://epsimo.org/actors/linkedin-job-scraping.md ### Use cases and Limits From the actor README on the Apify Store. #### Use cases for LinkedIn job data - Find companies hiring SDRs, engineers or marketers in a target city and reach out while the need is fresh. - Build a weekly feed of new roles into Google Sheets, Slack or a CRM. - Analyse job descriptions with an LLM to extract required skills, seniority or tech stack. - Track hiring trends for competitors or a market over time. #### How much will it cost to scrape LinkedIn jobs? You **pay only per result, no subscription** and no rental. One result is one job saved to the dataset. Run statistics are stored separately and are not charged as results. A small standard Actor start event also applies. Current prices, including volume discounts on higher Apify plans, are on the **Pricing** tab. Set a **maximum cost per run** and the run stops when that limit is reached. #### Tips for scraping LinkedIn jobs - Start with `max_pages: 1` to check the results, then scale up. - LinkedIn's guest search usually shows at most about 1,000 jobs per query. Split large searches by location or keyword. - If you see empty results or many `429` responses, enable the proxy option. #### FAQ, disclaimers and support ##### Is it legal to scrape LinkedIn job listings? You should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. Job descriptions can contain personal data, such as a recruiter's name or contact details. **You are responsible for making sure that your scraping and your use of the results are legal**, including LinkedIn's terms and data protection rules where you operate. ##### Do I need a LinkedIn account or cookies? No. The Actor only uses LinkedIn's public guest job pages. ##### Why did I get fewer jobs than expected? LinkedIn may return fewer results for narrow searches, or rate-limit requests. Check the run log and `RUN_METADATA`, and try enabling the proxy. ##### How do I report a problem or request a field? Open an issue in the **Issues** tab with the run ID. If the Actor saved you time, a rating on the **Reviews** tab helps other users find it. ### Input | Name | Type | Required | Default | Allowed values / range | Description | |---|---|---|---|---|---| | `keywords` | string | yes | `"SDR"` | - | Specific job titles or roles to search for | | `location` | string | yes | `"Paris"` | - | Geographical location for the job search | | `max_pages` | integer | yes | `1` | min 1 | Number of search result pages to scrape. Each page returns about 10 jobs; the run stops early when LinkedIn has no more results. | | `proxyConfiguration` | object | no | - | - | Optional proxy for requests to LinkedIn. Off by default. Use it if you see many 429 or 999 responses in the log; Apify Proxy usage is billed to your account. | ### Example input Built from the input schema prefill/default values (the actor publishes no example input). ```json { "keywords": "SDR", "location": "Paris", "max_pages": 1 } ``` ### Output | Field | Type | Description | |---|---|---| | `Title` | string or null | Job title (falls back to the company name when the card has no title) | | `Company` | string or null | Company offering the job | | `Location` | string or null | Job location as shown on LinkedIn | | `Link` | string or null | Public URL of the job posting | | `Description` | string or null | Full job description text, or 'No description available' when LinkedIn returned none | Dataset views: `overview` (Overview). ### Example output item Built from the `example` values of the dataset schema. ```json { "Title": "Sales Development Representative", "Company": "Example Company", "Location": "Paris, Île-de-France, France", "Link": "https://www.linkedin.com/jobs/view/sales-development-representative-at-example-company-4000000000", "Description": "As a Sales Development Representative, you will..." } ``` ### Pricing Pay per event, in effect since 2026-10-16 (as of 2026-10-18). Each event below is charged. | Event | Title | Description | Price USD (FREE tier) | |---|---|---|---| | `apify-actor-start` | Actor Start (once per run) | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.00005 | | `apify-default-dataset-item` | Job (primary) | One job listing (with description) saved to the default dataset. | $0.00165 | Plan-tier prices for `apify-default-dataset-item`: FREE $0.00165, BRONZE $0.0015, SILVER $0.00135, GOLD $0.0012, PLATINUM $0.0012, DIAMOND $0.0012. FREE-tier USD; tiered events can cost less on paid Apify plans; the Store page is authoritative. ### How to run ```bash curl -X POST "https://api.apify.com/v2/acts/quaking_pail~linkedin-job-scraping/run-sync-get-dataset-items" \ -H "Authorization: Bearer $APIFY_TOKEN" \ -H 'Content-Type: application/json' \ -d @input.json ``` `input.json` holds the example input above. The `?token=` variant and the 300-second limit: https://epsimo.org/actors/linkedin-job-scraping.md ### Apify MCP Server URL `https://mcp.apify.com?tools=quaking_pail/linkedin-job-scraping` (actor id `quaking_pail/linkedin-job-scraping`), with `Authorization: Bearer $APIFY_TOKEN`. Client configuration: see How to run any actor. ### Links - Apify Store: [quaking_pail/linkedin-job-scraping](https://apify.com/quaking_pail/linkedin-job-scraping) - Actor file: [linkedin-job-scraping.md](https://epsimo.org/actors/linkedin-job-scraping.md) - Sources: [actor API](https://api.apify.com/v2/acts/quaking_pail~linkedin-job-scraping), [build API](https://api.apify.com/v2/acts/quaking_pail~linkedin-job-scraping/builds/default) - Data fetched from the Apify API on 2026-10-18 - Build: 0.6.1 ### Do not See Do not at the top of this file. ## Google SERP Scraper ### What it does Scrape Google organic results: title, URL (exact page or site homepage, flagged by urlType), breadcrumb and snippet. Build the query from market, industry and location. Pay per result. README summary: https://epsimo.org/actors/google-serp-scraper.md ### Use cases and Limits From the actor README on the Apify Store. #### Use cases for Google search results data - Find marketing agencies, consultancies or shops in a given city. - Collect company websites to pass to a contact finder. - Track which domains appear for your target keywords. #### How much will it cost to scrape Google search results? You **pay per result, with no subscription** and no rental. One result is one organic search result saved to the dataset. Failed pages, retries and empty runs never create result charges. A small standard Actor start event applies to every run. See the **Pricing** tab for current prices, including discounts on higher Apify plans. Set a **maximum cost per run** and the Actor stops at that limit and keeps the results already saved. If the limit is too low for even one result, the run fails without charging any result. #### Tips for scraping Google - Results come from Google in English for the US; put the city in **Location** to narrow them. - Lower **Maximum Results** for quick checks, and raise it when you want more exact links: later pages often carry more plaintext links than page 1. - Make the query specific. Narrow queries return more company websites and fewer directory pages. - If a run fails with "No search results were scraped", Google blocked the requests or the query has no organic results. Keep the proxy on the default `GOOGLE_SERP` group and run it again. #### FAQ, disclaimers and support See [FAQ, disclaimers and support](https://epsimo.org/actors/google-serp-scraper.md) in the actor file. ### Input | Name | Type | Required | Default | Allowed values / range | Description | |---|---|---|---|---|---| | `search_query_base` | string | yes | - | - | The base query for the search, representing the market or type of company to target. Example: marketing agency. | | `domain` | string | no | `""` | - | The specific domain or industry to add to the search query, for example AI or e-commerce. Leave blank to leave it out of the query. | | `location` | string | no | `""` | - | The location to add to the search query, for example a city or country. Leave blank to search without a location. | | `info_to_retrieve` | string | no | `""` | - | An exact phrase Google must match, such as email or website. It is added to the query in quotes. Leave blank to leave it out of the query. | | `max_results` | integer | no | `100` | min 1; max 300 | The maximum number of search results to save. Google shows about 10 results per page, and the scraper reads at most 30 pages. | | `proxyConfiguration` | object | no | `{"useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"]}` | - | Proxy used to load Google. GOOGLE_SERP is the recommended group: it is built for Google result pages and billed per request. Other groups may be rate-limited by Google with HTTP 429. | ### Example input Built from the input schema prefill/default values (the actor publishes no example input). ```json { "search_query_base": "marketing agency", "domain": "IA", "location": "Paris", "info_to_retrieve": "email, website", "max_results": 100, "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": [ "GOOGLE_SERP" ] } } ``` ### Output | Field | Type | Description | |---|---|---| | `title` | string or null | Title of the search result as shown on Google | | `url` | string or null | Real target URL of the result. Google /url and /goto wrappers are removed. When Google encrypts the link, this is the site origin (homepage); see urlType. | | `displayedUrl` | string or null | Breadcrumb Google shows under the title (site and path), or the hostname of the URL when Google shows none | | `description` | string or null | Snippet text Google shows under the result | | `emphasizedKeywords` | array or null | Tracked keywords (agence, marketing) found in the title or snippet | | `type` | string or null | Result type. Always organic. | | `urlType` | string or null | exact: url is the deep link Google returned. origin: Google encrypted the link, so url is the site's homepage taken from the breadcrumb. | Dataset views: `overview` (Overview). ### Example output item Built from the `example` values of the dataset schema. ```json { "title": "Example Marketing Agency | Paris", "url": "https://www.example.com/agency", "displayedUrl": "www.example.com › agency", "description": "Example agency offering digital marketing services in Paris.", "emphasizedKeywords": [ "marketing" ], "type": "organic", "urlType": "exact" } ``` ### Pricing Pay per event, in effect since 2026-10-16 (as of 2026-10-18). Each event below is charged. | Event | Title | Description | Price USD (FREE tier) | |---|---|---|---| | `apify-actor-start` | Actor Start (once per run) | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.00005 | | `apify-default-dataset-item` | Search result (primary) | One organic Google search result saved to the default dataset. Failed searches are never charged. | $0.0011 | Plan-tier prices for `apify-default-dataset-item`: FREE $0.0011, BRONZE $0.001, SILVER $0.0009, GOLD $0.0008, PLATINUM $0.0008, DIAMOND $0.0008. FREE-tier USD; tiered events can cost less on paid Apify plans; the Store page is authoritative. ### How to run ```bash curl -X POST "https://api.apify.com/v2/acts/quaking_pail~google-serp-scraper/run-sync-get-dataset-items" \ -H "Authorization: Bearer $APIFY_TOKEN" \ -H 'Content-Type: application/json' \ -d @input.json ``` `input.json` holds the example input above. The `?token=` variant and the 300-second limit: https://epsimo.org/actors/google-serp-scraper.md ### Apify MCP Server URL `https://mcp.apify.com?tools=quaking_pail/google-serp-scraper` (actor id `quaking_pail/google-serp-scraper`), with `Authorization: Bearer $APIFY_TOKEN`. Client configuration: see How to run any actor. ### Links - Apify Store: [quaking_pail/google-serp-scraper](https://apify.com/quaking_pail/google-serp-scraper) - Actor file: [google-serp-scraper.md](https://epsimo.org/actors/google-serp-scraper.md) - Sources: [actor API](https://api.apify.com/v2/acts/quaking_pail~google-serp-scraper), [build API](https://api.apify.com/v2/acts/quaking_pail~google-serp-scraper/builds/default) - Data fetched from the Apify API on 2026-10-18 - Build: 0.8.2 ### Do not See Do not at the top of this file. ## Ai SEO Content Curator ### What it does Audit every page of a website for SEO (title, meta description, headings, canonical, Open Graph, status code) and get its main content as clean Markdown for AI. Headless Chrome, API. README summary: https://epsimo.org/actors/ai-seo-content-markdown-scraper.md ### Use cases and Limits From the actor README on the Apify Store. #### Use cases for an SEO audit with Markdown content - Find pages with a missing meta description, several H1s or no canonical. - Export a site's titles and descriptions to a spreadsheet for rewriting. - Feed page content and its SEO metadata to an LLM to suggest better titles and descriptions. - Re-run on a schedule to catch SEO regressions. #### How much will it cost to audit a website? You **pay only per result, no subscription** and no rental. One result is one scraped page. Pages that fail to load are not stored and not charged. Pages that load with an error status (for example 404) are stored with their real status code, because that is a valid audit result. A small standard Actor start event also applies. Current prices, including discounts on higher Apify plans, are on the **Pricing** tab. **Maximum URLs** caps the page count, and the run stops when your **maximum cost per run** is reached. #### Tips for SEO audits - Start with `max_depth` 1 and a small **Maximum URLs** to check the output, then scale up. - The browser starts once per run, so auditing several pages per run is more efficient than many single-page runs. - Use a start URL on the final domain to skip a redirect. #### FAQ, disclaimers and support ##### Is it legal to scrape websites for an SEO audit? You should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. ##### Why did I get only one page? `max_depth` is 0, the page has no links on the same domain, or **Maximum URLs** is 1. The log shows how many internal links were found on each page. ##### Does it give an SEO score? No. It returns the individual checks (`ok`, `absent`, `problematic`, `missing`) so you can filter and prioritise them yourself. ##### How do I report a problem? Open an issue in the **Issues** tab with the run ID. If the Actor saved you time, a rating on the **Reviews** tab helps other users find it. ### Input | Name | Type | Required | Default | Allowed values / range | Description | |---|---|---|---|---|---| | `start_urls` | array | yes | - | - | Pages to start scraping from. Internal links on the start URL's domain (taken after the start URL's redirects) are followed up to Maximum depth. | | `max_depth` | integer | no | `1` | min 0 | How deep to follow internal links. 0 scrapes only the start URLs, 1 also scrapes the pages they link to. | | `max_urls` | integer | no | `10` | min 1 | Maximum number of pages to scrape. Each scraped page is one dataset item. | | `search_engine` | string | no | `"Google"` | `"Google"`, `"Bing"`, `"DuckDuckGo"` | Informational label copied into each result's search_engine field. It does not change how pages are scraped. | ### Example input Built from the input schema prefill/default values (the actor publishes no example input). ```json { "start_urls": [ { "url": "https://docs.apify.com/" } ], "max_depth": 1, "max_urls": 10, "search_engine": "Google" } ``` ### Output | Field | Type | Description | |---|---|---| | `url` | string or null | URL that was requested for this page | | `info` | object or null | Page metadata and statistics | | `network` | object or null | HTTP request and response details from a separate plain HTTP fetch | | `seoAudit` | object or null | On-page SEO checks | | `content` | string or null | Main page content (main, else a single article, else body) converted to Markdown | | `timestamp` | string or null | UTC time the page was scraped | | `search_engine` | string or null | Informational label from the input | Dataset views: `overview` (Overview), `titles` (URLs and their titles), `content` (Markdown content). ### Example output item Built from the `example` values of the dataset schema. ```json { "url": "https://example.com/blog/example-post", "info": { "status": "complete", "title": "Example Page Title", "htmlLang": "en", "wordCount": 850 }, "network": { "HttpResponseCode": 200, "loadTime": 0.35, "HttpContentType": "text/html; charset=utf-8" }, "seoAudit": { "titlePresent": "ok", "h1Count": 1, "headingStructureOk": "ok" }, "content": "# Example Heading Example paragraph text for the page.", "timestamp": "2025-01-15T12:00:00Z", "search_engine": "Google" } ``` ### Pricing Pay per event, in effect since 2026-10-16 (as of 2026-10-18). Each event below is charged. | Event | Title | Description | Price USD (FREE tier) | |---|---|---|---| | `apify-actor-start` | Actor Start (once per run) | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.00005 | | `apify-default-dataset-item` | Page (primary) | One audited page (SEO checks + Markdown) saved to the default dataset. | $0.0066 | Plan-tier prices for `apify-default-dataset-item`: FREE $0.0066, BRONZE $0.006, SILVER $0.0054, GOLD $0.0048, PLATINUM $0.0048, DIAMOND $0.0048. FREE-tier USD; tiered events can cost less on paid Apify plans; the Store page is authoritative. ### How to run ```bash curl -X POST "https://api.apify.com/v2/acts/quaking_pail~ai-seo-content-markdown-scraper/run-sync-get-dataset-items" \ -H "Authorization: Bearer $APIFY_TOKEN" \ -H 'Content-Type: application/json' \ -d @input.json ``` `input.json` holds the example input above. The `?token=` variant and the 300-second limit: https://epsimo.org/actors/ai-seo-content-markdown-scraper.md ### Apify MCP Server URL `https://mcp.apify.com?tools=quaking_pail/ai-seo-content-markdown-scraper` (actor id `quaking_pail/ai-seo-content-markdown-scraper`), with `Authorization: Bearer $APIFY_TOKEN`. Client configuration: see How to run any actor. ### Links - Apify Store: [quaking_pail/ai-seo-content-markdown-scraper](https://apify.com/quaking_pail/ai-seo-content-markdown-scraper) - Actor file: [ai-seo-content-markdown-scraper.md](https://epsimo.org/actors/ai-seo-content-markdown-scraper.md) - Sources: [actor API](https://api.apify.com/v2/acts/quaking_pail~ai-seo-content-markdown-scraper), [build API](https://api.apify.com/v2/acts/quaking_pail~ai-seo-content-markdown-scraper/builds/default) - Data fetched from the Apify API on 2026-10-18 - Build: 0.7.1 ### Do not See Do not at the top of this file. ## Google Serp Scraper Lead Finder ### What it does Find public LinkedIn profiles that match a plain-language description via Google search. Get profile URL, name, headline and snippet per lead, plus public location when shown. No login. Pay per lead. README summary: https://epsimo.org/actors/google-serp-scraper-lead-finder.md ### Use cases and Limits From the actor README on the Apify Store. #### Use cases for LinkedIn lead search - Build a list of "Head of Growth, SaaS, Berlin" profiles for outreach. - Find decision makers for an account list, then enrich them in your CRM. - Source candidates for a role from public profiles. #### How much will it cost to find LinkedIn leads? You **pay per lead, with no subscription** and no rental. One lead is one row saved to the dataset. Failed requests, retries and diagnostics go to the key-value store record `FAILED_REQUESTS` and are never billed. A run that finds no leads ends as failed and charges no leads. A small standard Actor start event applies to every run. See the **Pricing** tab for current prices, including discounts on higher Apify plans. The run stops at **Maximum Results** or at your **maximum cost per run**, whichever comes first. #### Tips for better LinkedIn lead results - Use specific job titles plus an industry or city. - Turn off **Scrape LinkedIn Profiles** for faster runs. You still get URL, title, snippet, and the name and headline from the search title. You lose only the location. - Keep **Google Proxy Groups** empty so Google goes through `GOOGLE_SERP`. - Keep the default Google strategy. **Bing Only** no longer searches Bing alone: Bing is currently unreliable, so that option also starts with Google. #### FAQ, disclaimers and support See [FAQ, disclaimers and support](https://epsimo.org/actors/google-serp-scraper-lead-finder.md) in the actor file. ### Input | Name | Type | Required | Default | Allowed values / range | Description | |---|---|---|---|---|---| | `profile_description` | string | yes | - | - | Description of the profile you're looking for (e.g., 'marketing manager startup') | | `location` | string | no | - | - | Optional location to target (e.g., 'Paris, France') | | `exclude_keywords` | array | no | - | - | Optional keywords to exclude from search. Page 1 uses Google's -keyword operator. Google returns no later pages for such queries, so pages 2+ are fetched without the operators and results whose title, snippet or profile URL contains an excluded word or phrase (case-insensitive, whole words) are dropped and not charged. The operator-free list starts at the page that came back empty, so its own first page is skipped and runs with exclusions may return fewer leads. | | `max_results` | integer | no | `10` | min 1; max 10000 | Maximum number of leads to extract (one dataset row per lead). Values above 1000 are capped to 1000. | | `scrape_profiles` | boolean | no | `true` | - | Visit each public LinkedIn profile to add name, headline and location. Each lead is still one row; if LinkedIn shows a login wall, the row keeps the search snippet only. | | `search_engine_strategy` | string | no | `"google_with_fallback"` | `"google_only"` (Google Only), `"bing_only"` (Bing Only (unreliable, now uses Google first)), `"rotation"` (Rotate Between Google and Bing (Bing currently unreliable)), `"google_with_fallback"` (Start with Google, Fallback to Bing if Blocked) | Which search engine to use. Google (GOOGLE_SERP proxy) first, Bing as fallback: Bing is used automatically when Google blocks the run or finds no LinkedIn profiles. Bing is currently unreliable: it answers automated requests with results unrelated to the query. Bing Only is kept for compatibility but now runs like the default (Google first, Bing as fallback) and logs a warning. Since 0.20, Rotate also starts with Google and uses Bing only as a fallback. | | `use_direct_linkedin` | boolean | no | `false` | - | Whether to use direct LinkedIn URLs instead of search | | `linkedin_urls` | array | no | - | - | Direct LinkedIn profile URLs to scrape (if use_direct_linkedin is true) | | `proxy_country` | string | no | `"US"` | `"US"` (United States), `"UK"` (United Kingdom), `"FR"` (France), `"DE"` (Germany), `"CA"` (Canada), `"AU"` (Australia), `"JP"` (Japan), `"SG"` (Singapore), `"NL"` (Netherlands), `"BR"` (Brazil), `"IN"` (India) | Country code for proxy location | | `proxy_groups` | array | no | - | - | Apify Proxy groups for Bing search pages and LinkedIn profile pages | | `google_proxy_groups` | array | no | - | - | Optional Apify Proxy groups for Google search pages. Leave empty to use GOOGLE_SERP, the Apify Google SERP proxy built for Google result pages and billed per request (recommended). Other groups, such as datacenter proxies, are often rate-limited by Google (HTTP 429). | | `timezone` | string | no | `"America/New_York"` | `"America/New_York"`, `"America/Los_Angeles"`, `"America/Chicago"`, `"Europe/London"`, `"Europe/Paris"`, `"Europe/Berlin"`, `"Asia/Tokyo"`, `"Asia/Singapore"`, `"Australia/Sydney"` | Ignored since 0.20 (no browser). Kept so existing API calls keep working. | | `max_captcha_retries` | integer | no | `3` | min 1; max 10 | Retries per search page (with a new proxy IP each time) before it counts as blocked and the run switches search engines. Google pages through GOOGLE_SERP get at least 5 retries. | ### Example input Built from the input schema prefill/default values (the actor publishes no example input). ```json { "profile_description": "marketing manager startup", "exclude_keywords": [ "post", "jobs" ], "max_results": 10, "scrape_profiles": true, "search_engine_strategy": "google_with_fallback", "use_direct_linkedin": false, "linkedin_urls": [], "proxy_country": "US", "proxy_groups": [ "BUYPROXIES94952", "StaticUS3" ], "timezone": "America/New_York", "max_captcha_retries": 3 } ``` ### Output | Field | Type | Description | |---|---|---| | `title` | string or null | Search result title (or profile name for direct LinkedIn URLs) | | `profileUrl` | string or null | Normalized LinkedIn profile URL | | `description` | string or null | Search result snippet (or profile headline for direct LinkedIn URLs) | | `displayedUrl` | string or null | Host name of the profile URL | | `name` | string or null | Name from the public LinkedIn profile when it was scraped, otherwise parsed from the search result title (null if not parsable) | | `headline` | string or null | Headline from the public LinkedIn profile when it was scraped, otherwise the search result title after the name (null if not parsable) | | `location` | string or null | Location from the public LinkedIn profile, when the profile was scraped | | `profileScraped` | boolean or null | True when public profile data (name, headline, location) was extracted | | `source` | string or null | Where the lead came from: google_search, bing_search, linkedin_profile or direct_url | | `sourceSearchEngine` | string or null | Search engine that returned the lead (null for direct LinkedIn URLs) | | `note` | string or null | Processing note, e.g. whether the profile visit was skipped or hit a login wall | | `scrapedAt` | string or null | ISO timestamp when the lead was saved | Dataset views: `overview` (Overview). ### Example output item Built from the `example` values of the dataset schema. ```json { "title": "Jane Doe - Marketing Manager - Example Startup | LinkedIn", "profileUrl": "https://www.linkedin.com/in/jane-doe-0a1b2c3d/", "description": "Marketing Manager at Example Startup. Growth, SEO and content strategy.", "displayedUrl": "www.linkedin.com", "name": "Jane Doe", "headline": "Marketing Manager at Example Startup", "location": "Paris, Île-de-France, France", "profileScraped": false, "source": "bing_search", "sourceSearchEngine": "bing", "note": "LinkedIn login wall; search snippet only", "scrapedAt": "2025-01-15T12:00:00.000Z" } ``` ### Pricing Pay per event, in effect since 2026-10-16 (as of 2026-10-18). Each event below is charged. | Event | Title | Description | Price USD (FREE tier) | |---|---|---|---| | `apify-actor-start` | Actor Start (once per run) | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.00005 | | `apify-default-dataset-item` | Lead (primary) | One LinkedIn profile lead saved to the default dataset. Failed searches are never charged. | $0.0033 | Plan-tier prices for `apify-default-dataset-item`: FREE $0.0033, BRONZE $0.003, SILVER $0.0027, GOLD $0.0024, PLATINUM $0.0024, DIAMOND $0.0024. FREE-tier USD; tiered events can cost less on paid Apify plans; the Store page is authoritative. ### How to run ```bash curl -X POST "https://api.apify.com/v2/acts/quaking_pail~google-serp-scraper-lead-finder/run-sync-get-dataset-items" \ -H "Authorization: Bearer $APIFY_TOKEN" \ -H 'Content-Type: application/json' \ -d @input.json ``` `input.json` holds the example input above. The `?token=` variant and the 300-second limit: https://epsimo.org/actors/google-serp-scraper-lead-finder.md ### Apify MCP Server URL `https://mcp.apify.com?tools=quaking_pail/google-serp-scraper-lead-finder` (actor id `quaking_pail/google-serp-scraper-lead-finder`), with `Authorization: Bearer $APIFY_TOKEN`. Client configuration: see How to run any actor. ### Links - Apify Store: [quaking_pail/google-serp-scraper-lead-finder](https://apify.com/quaking_pail/google-serp-scraper-lead-finder) - Actor file: [google-serp-scraper-lead-finder.md](https://epsimo.org/actors/google-serp-scraper-lead-finder.md) - Sources: [actor API](https://api.apify.com/v2/acts/quaking_pail~google-serp-scraper-lead-finder), [build API](https://api.apify.com/v2/acts/quaking_pail~google-serp-scraper-lead-finder/builds/default) - Data fetched from the Apify API on 2026-10-18 - Build: 0.20.6 ### Do not See Do not at the top of this file. ## Website Contacts Crawler ### What it does Extract emails, phone numbers, team names and LinkedIn links from company websites. Finds contact, team and about pages for you. One row per company; the contact fee applies only when found. README summary: https://epsimo.org/actors/contact-crawler.md ### Use cases and Limits From the actor README on the Apify Store. #### Use cases for website contact extraction - Turn a list of company domains into a contact sheet for outreach. - Fill missing emails and phone numbers in HubSpot, Pipedrive or Salesforce exports. - Find the leadership team of partner or competitor companies. - Feed company contact data into an LLM or enrichment workflow. #### How much will it cost to find website contacts? You **pay only per result, no subscription** and no rental. A result here is a **website where at least one email or phone number was found**. Websites with no email and no phone are still returned in the dataset, so you can see they were checked, but they are not charged the contact event. Standard platform events, such as the Actor start, are listed too. Prices are shown on the **Pricing** tab and may differ by Apify plan. If you set a **maximum cost per run**, the crawler stops before the next website once that limit is reached, so a run never costs more than you allowed. #### Tips for better contact results - Use the company's main domain (for example `example.com`, not a landing-page URL). - Raise **Max pages per site** for large companies with separate team or leadership pages. - Sites that load their content with JavaScript can return few or no contacts, because the crawler reads HTML only. - People are detected only when a name appears next to a job title. Names without a role may be missed. #### FAQ, disclaimers and support ##### Is it legal to scrape contact details from websites? You should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. This Actor returns names, emails and phone numbers that websites publish, which is personal data in many cases. **You are responsible for making sure that your scraping and your use of the results are legal** in your country, including GDPR and anti-spam rules for outreach. ##### Does it find personal email addresses or scrape LinkedIn? No. It only returns what is published on the website you give it. LinkedIn URLs are returned only when the website links to them. ##### Why did a website return no contacts? The site may publish contacts only in images or forms, load content with JavaScript, or block automated requests. Check `pages_crawled` and `pages_failed` in the result and the run log. ##### How do I report a problem? Open an issue in the **Issues** tab with the run ID so we can reproduce it. If the Actor saved you time, a rating on the **Reviews** tab helps other users find it. ### Input | Name | Type | Required | Default | Allowed values / range | Description | |---|---|---|---|---|---| | `urls` | array of string | yes | - | - | List of company website URLs to crawl for contacts. | | `maxPagesPerSite` | integer | no | `10` | min 1; max 50 | Maximum number of pages to crawl per website (homepage + discovered contact/team/about/leadership pages). | | `delayBetweenRequests` | integer | no | `2` | min 0; max 30 | Delay in seconds between HTTP requests to be respectful to servers. | ### Example input Built from the input schema prefill/default values (the actor publishes no example input). ```json { "urls": [ "https://apify.com" ], "maxPagesPerSite": 10, "delayBetweenRequests": 2 } ``` ### Output | Field | Type | Description | |---|---|---| | `company_name` | string or null | Company name derived from the website domain | | `url` | string or null | Website URL that was crawled | | `emails` | array or null | Unique email addresses found (max 20) | | `phones` | array or null | Unique phone numbers found (max 10) | | `people` | array or null | Names found next to a job title (max 30) | | `linkedin` | array or null | LinkedIn profile URLs linked from the site (max 30) | | `pages_crawled` | integer or null | Number of pages successfully crawled | | `pages_failed` | integer or null | Number of pages that returned an HTTP error | Dataset views: `overview` (Overview). ### Example output item Built from the `example` values of the dataset schema. ```json { "company_name": "Example Company", "url": "https://www.example-company.com", "emails": [ "contact@example-company.com" ], "phones": [ "+33 1 23 45 67 89" ], "people": [ "Jane Doe" ], "linkedin": [ "https://www.linkedin.com/in/janedoe" ], "pages_crawled": 5, "pages_failed": 2 } ``` ### Pricing Pay per event, in effect since 2026-10-16 (as of 2026-10-18). Each event below is charged. | Event | Title | Description | Price USD (FREE tier) | |---|---|---|---| | `apify-actor-start` | Actor Start (once per run) | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.00005 | | `find-contact` | Website with contacts (primary) | Charged once per website where at least one email address or phone number is found. | $0.0055 | Plan-tier prices for `find-contact`: FREE $0.0055, BRONZE $0.005, SILVER $0.0045, GOLD $0.004, PLATINUM $0.004, DIAMOND $0.004. FREE-tier USD; tiered events can cost less on paid Apify plans; the Store page is authoritative. ### How to run ```bash curl -X POST "https://api.apify.com/v2/acts/quaking_pail~contact-crawler/run-sync-get-dataset-items" \ -H "Authorization: Bearer $APIFY_TOKEN" \ -H 'Content-Type: application/json' \ -d @input.json ``` `input.json` holds the example input above. The `?token=` variant and the 300-second limit: https://epsimo.org/actors/contact-crawler.md ### Apify MCP Server URL `https://mcp.apify.com?tools=quaking_pail/contact-crawler` (actor id `quaking_pail/contact-crawler`), with `Authorization: Bearer $APIFY_TOKEN`. Client configuration: see How to run any actor. ### Links - Apify Store: [quaking_pail/contact-crawler](https://apify.com/quaking_pail/contact-crawler) - Actor file: [contact-crawler.md](https://epsimo.org/actors/contact-crawler.md) - Sources: [actor API](https://api.apify.com/v2/acts/quaking_pail~contact-crawler), [build API](https://api.apify.com/v2/acts/quaking_pail~contact-crawler/builds/default) - Data fetched from the Apify API on 2026-10-18 - Build: 0.4.1 ### Do not See Do not at the top of this file. ## AI Company URL Lead Qualify ### What it does This actor will use a company URL and return : The Value Proposal of the company, the industry, the target market and target profile. It will help marketing team qualifying leads on the fly. README summary: https://epsimo.org/actors/ai-company-url-lead-qualify.md ### Use cases and Limits Not published. ### Input | Name | Type | Required | Default | Allowed values / range | Description | |---|---|---|---|---|---| | `domains` | array | yes | - | - | List of company domain names (e.g., example.com) you want to scrape data from. | ### Example input Built from the input schema prefill/default values (the actor publishes no example input). ```json { "domains": [ "danone.com", "epsimoai.com" ] } ``` ### Output Not published. The dataset view `overview` (Overview) shows these fields: `company_domain`, `value_proposition`, `industry`, `target_audience`, `market`. Their types and descriptions are not published. ### Example output item Not published. ### Pricing Pay per event, in effect since 2026-10-16 (as of 2026-10-18). Each event below is charged. | Event | Title | Description | Price USD (FREE tier) | |---|---|---|---| | `apify-actor-start` | Actor Start (once per run) | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.00005 | | `apify-default-dataset-item` | Qualified company (primary) | One company domain qualified by AI and saved to the default dataset. Failed domains are never charged. | $0.011 | Plan-tier prices for `apify-default-dataset-item`: FREE $0.011, BRONZE $0.01, SILVER $0.009, GOLD $0.008, PLATINUM $0.008, DIAMOND $0.008. FREE-tier USD; tiered events can cost less on paid Apify plans; the Store page is authoritative. ### How to run ```bash curl -X POST "https://api.apify.com/v2/acts/quaking_pail~ai-company-url-lead-qualify/run-sync-get-dataset-items" \ -H "Authorization: Bearer $APIFY_TOKEN" \ -H 'Content-Type: application/json' \ -d @input.json ``` `input.json` holds the example input above. The `?token=` variant and the 300-second limit: https://epsimo.org/actors/ai-company-url-lead-qualify.md ### Apify MCP Server URL `https://mcp.apify.com?tools=quaking_pail/ai-company-url-lead-qualify` (actor id `quaking_pail/ai-company-url-lead-qualify`), with `Authorization: Bearer $APIFY_TOKEN`. Client configuration: see How to run any actor. ### Links - Apify Store: [quaking_pail/ai-company-url-lead-qualify](https://apify.com/quaking_pail/ai-company-url-lead-qualify) - Actor file: [ai-company-url-lead-qualify.md](https://epsimo.org/actors/ai-company-url-lead-qualify.md) - Sources: [actor API](https://api.apify.com/v2/acts/quaking_pail~ai-company-url-lead-qualify), [build API](https://api.apify.com/v2/acts/quaking_pail~ai-company-url-lead-qualify/builds/default) - Data fetched from the Apify API on 2026-10-18 - Build: 0.0.31 ### Do not See Do not at the top of this file. ## Google Condensed SERP Scraper ### What it does Get Google search results as one condensed text of titles and snippets, ready for LLM prompts, AI agents and market research. Build the query from market, industry and location. README summary: https://epsimo.org/actors/google-condensed-serp-scraper.md ### Use cases and Limits From the actor README on the Apify Store. #### Use cases for condensed Google results - Give an AI agent a compact summary of Google results before it decides which sites to visit. - Generate a first list of companies in a niche and location for prospecting. - Compare how a market looks on Google across cities by changing one field. #### How much will it cost to scrape Google results? You **pay per Google results page; see the Pricing tab** for current prices. There is no subscription and no rental. One page holds up to 10 results, and `pagesUsed` in the output shows how many pages your summary used. The summary row itself is free. Pages that add no new result, retries of blocked pages, and failed runs are not charged. If nothing could be extracted, the run fails with a clear message and no page is charged. A small standard Actor start event also applies. Lower **Maximum Results** to cap the number of pages, or set a maximum cost per run: the Actor then stops before fetching pages your budget does not cover. The **Pricing** tab is authoritative for current prices, including discounts on higher Apify plans. #### Tips for condensed Google searches - Lower **Maximum Results** for faster runs. 10 results = 1 Google page. - Use Google operators in **Domain**, such as `site:linkedin.com/company` or `-jobs`, to sharpen results. - Google sometimes answers page 2+ of a query with `-keyword` operators with "did not match any documents". The Actor then re-requests that page without the operators and drops results whose title, snippet or URL contains an excluded word or phrase (or that come from an excluded `-site:`). Known limitation: this operator-free list can return fewer results. - Google blocks some requests. Blocked pages are retried automatically; if a run still fails with "No search results could be extracted", run it again or broaden the query. #### FAQ, disclaimers and support ##### Is it legal to scrape Google search results? You should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. ##### Why did I get fewer results than Maximum Results? Google sometimes has fewer results for a narrow query, or blocks some pages. The Actor returns what it collected instead of running until the timeout. ##### Why did my run fail? Google blocked every page or the query had no results. No Google results page is charged in that case. Try again or broaden the query. ##### How do I report a problem? Open an issue in the **Issues** tab with the run ID. If the Actor saved you time, a rating on the **Reviews** tab helps other users find it. #### 0.9.2 pricing update (October 2026) - Pricing is now **per Google results page** (`serp-page` event) instead of per summary row. The summary row is no longer charged. See the **Pricing** tab. - A run that is restarted or migrated by the platform never pushes the summary twice or charges a page twice. ### Input | Name | Type | Required | Default | Allowed values / range | Description | |---|---|---|---|---|---| | `search_query_base` | string | yes | `"société de conseil"` | - | The base query for the search, representing the market or type of company to target. | | `domain` | string | yes | `"IA"` | - | The specific domain or industry to target in the search query. | | `location` | string | yes | `"Paris"` | - | The location to target in the search query. | | `info_to_retrieve` | string | yes | `"email, website"` | - | The specific information to retrieve, such as email or website. Added to the query in quotes. | | `max_results` | integer | no | `100` | min 1 | The maximum number of search results to condense into the summary. Google returns 10 results per page, so the Actor fetches at most ceil(max_results / 10) pages (never more than 30 per run) and stops early when Google has no more results. Exclusions such as -jobs in your fields are honored on later pages too: if Google rejects them there, the Actor filters titles and snippets instead. | | `proxyConfiguration` | object | no | `{"useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"]}` | - | Google SERP proxy (default) fetches Google result pages over plain HTTP and is billed per page; other groups are often rate-limited by Google (HTTP 429). | ### Example input Built from the input schema prefill/default values (the actor publishes no example input). ```json { "search_query_base": "société de conseil", "domain": "IA", "location": "Paris", "info_to_retrieve": "email, website", "max_results": 100, "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": [ "GOOGLE_SERP" ] } } ``` ### Output | Field | Type | Description | |---|---|---| | `searchUrl` | string or null | Google Search URL of the first results page for the generated query | | `resultsText` | string or null | All collected results condensed into one text, each as 'Title: snippet', separated by ' /**/ ' | | `resultsCount` | integer or null | Number of results in resultsText (unique by URL, at most Maximum Results) | | `pagesUsed` | integer or null | Number of Google results pages that contributed at least one result to the summary | Dataset views: `overview` (Overview). ### Example output item Built from the `example` values of the dataset schema. ```json { "searchUrl": "https://www.google.com/search?q=example+company+Paris", "resultsText": "Example Company - Consulting: Example Company helps teams in Paris... /**/ Example Partners: AI consulting firm...", "resultsCount": 18, "pagesUsed": 2 } ``` ### Pricing Pay per event, in effect since 2026-10-17 (as of 2026-10-18). Each event below is charged. | Event | Title | Description | Price USD (FREE tier) | |---|---|---|---| | `apify-actor-start` | Actor Start (once per run) | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.00005 | | `serp-page` | Google results page (primary) | Charged once per Google results page (up to 10 results) included in the delivered summary. Failed runs charge nothing. | $0.0087 | Plan-tier prices for `serp-page`: FREE $0.0087, BRONZE $0.008, SILVER $0.0072, GOLD $0.0064, PLATINUM $0.0064, DIAMOND $0.0064. FREE-tier USD; tiered events can cost less on paid Apify plans; the Store page is authoritative. ### How to run ```bash curl -X POST "https://api.apify.com/v2/acts/quaking_pail~google-condensed-serp-scraper/run-sync-get-dataset-items" \ -H "Authorization: Bearer $APIFY_TOKEN" \ -H 'Content-Type: application/json' \ -d @input.json ``` `input.json` holds the example input above. The `?token=` variant and the 300-second limit: https://epsimo.org/actors/google-condensed-serp-scraper.md ### Apify MCP Server URL `https://mcp.apify.com?tools=quaking_pail/google-condensed-serp-scraper` (actor id `quaking_pail/google-condensed-serp-scraper`), with `Authorization: Bearer $APIFY_TOKEN`. Client configuration: see How to run any actor. ### Links - Apify Store: [quaking_pail/google-condensed-serp-scraper](https://apify.com/quaking_pail/google-condensed-serp-scraper) - Actor file: [google-condensed-serp-scraper.md](https://epsimo.org/actors/google-condensed-serp-scraper.md) - Sources: [actor API](https://api.apify.com/v2/acts/quaking_pail~google-condensed-serp-scraper), [build API](https://api.apify.com/v2/acts/quaking_pail~google-condensed-serp-scraper/builds/default) - Data fetched from the Apify API on 2026-10-18 - Build: 0.9.3 ### Do not See Do not at the top of this file.