# Cliqto Media: full site content Source: https://cliqtomedia.com · Generated 2026-10-24 --- # Cliqto Media > An independent digital media company. Our brands help people choose good products with honest guides, free tools and picks we stand behind. URL: https://cliqtomedia.com/ Cliqto Media is an independent digital media company. We build our own brands, websites and tools. We promote products we trust to the people who use them. Since 2020. ## Our model 1. **Audience**: We find a group of people with a clear need. 2. **Brand**: We give them a home: a brand, a website or a tool. 3. **Content**: We make guides, tools and posts that help them. 4. **Recommendations**: We recommend products that fit them, and mark partner links. ## Our portfolio - **Voxlo Studio** (brand, live): Original 3D-printable designs: toys, gadgets and puzzles that people print at home. Audience: Makers, 3D printing fans, Families. - **cliqtomedia.com** (website, live): Guides, tool pages and how-tos about web data, AI and online work. Audience: Marketers, Developers, Small businesses, Creators. - **Apify Actors** (product line, live): Apify Actors (web scrapers and data APIs): 150+ built, 103 live. People use them to get public web data without code. Audience: Data teams, Sales teams, Researchers. - **Browser extensions** (product line, live): Free tools that run in your own browser. The first one: Bulk Post Scheduler for X. Audience: Creators, Social media managers. - **Social channels** (channels, live): News, short demos and how-to articles for the people who use our sites and tools. Audience: Our readers, Our users. - **New brands** (in the works, next): New websites for new audiences. We add each brand here when it is ready. Audience: New audiences. ## Our audiences - **3D printing and making** (live): People who design, print and make things at home. Where: Voxlo Studio. - **Software and AI tools** (next): People who choose software for work: AI, automation, CRM, email. Where: cliqtomedia.com. - **Web data and developers** (live): Teams that collect public data and build with APIs. Where: Apify Actors. - **Creators and social media** (live): People who post, film and grow an audience online. Where: Social channels · X extension. - **Travel and life abroad** (next): People who travel, move or live in another country. Where: New brand. - **Insurance and money** (next): Health and travel insurance, banking and money tools. Where: New brand. - **Learning and languages** (next): People who learn new skills and new languages. Where: New brand. Live: we already have a site or a product for this audience. Next: we plan a new brand for it. ## What we publish - **Brand websites**: Each audience gets its own site with its own name. - **Guides and how-tos**: Step by step: how a product works and how to start. - **Reviews and comparisons**: What we liked, what we did not, and who it is for. - **Free tools**: Tools and extensions that people use every day. - **Short videos**: Demos and tips on YouTube and social media. - **Social posts**: News and short tips on X, Medium and LinkedIn. ## Our standards - **Honest fit**: We recommend a product only to the people it is made for. A partner cannot buy a good review. - **Clear disclosure**: Every page with partner links says so, next to the links. - **Clean traffic**: No paid clicks, no coupon sites, no search ads on a partner's brand name without permission, no spam. - **Our own voice**: We choose what to build, what to write and what to recommend. ## For partners We work with affiliate programs, platforms and data owners: https://cliqtomedia.com/partners/ ## Questions ### What is Cliqto Media? Cliqto Media is an independent digital media company. We build our own brands, websites and tools. We promote products we trust to the people who use them. We started in 2020. ### What do you make? Brands with their own websites, like [Voxlo Studio](/brands/voxlo-studio/). Software products: Apify Actors for web data and browser extensions. And content: guides, reviews and tool pages. ### Are you an agency? No. An agency works on other people's projects. We work only on our own brands, websites and products. ### How do you earn money? From our own products and from partner programs. When we recommend a product, we may earn a commission. We always mark these links. ### How do you choose what to recommend? A product must be useful for the people who read the page. We use it or test it first. A partner cannot pay for a good review. ### How can we work together? Write to partners@cliqtomedia.com. See the [Partners page](/partners/) for what we look for and how we promote. Contact: hello@cliqtomedia.com (general), partners@cliqtomedia.com (partnerships). --- # About Cliqto Media > Cliqto Media is an independent digital media company since 2020. We build our own brands, websites and tools, and recommend products we trust. URL: https://cliqtomedia.com/about/ Cliqto Media is an independent digital media company. We build our own brands, websites and tools. We promote products we trust to the people who use them. We are not an agency. Everything you see here is our own. ## Who we are Cliqto Media started in 2020. We build our own brands, websites and tools. Each of them serves one group of people: makers, creators, marketers, developers or small businesses. On our sites we help these people choose good products: guides, reviews, free tools and recommendations. Partner links are always marked. We earn from our own products and from partner programs. ## What we are We are: - A media company with our own brands and websites - A publisher of guides, reviews and tool pages - A maker of our own software - Independent: we choose what we write We are not: - An agency: we do not take outside projects - A coupon or cashback site - An ad network - Part of Apify: our Actors only run there ## Our story - **2020, Cliqto Media starts**: We start Cliqto Media as the home for our own web projects. - **2023, Our tools go live on Apify**: Our first Apify Actors appear in the Apify Store. Today we have built 150+, and 103 are live. - **2026, Voxlo Studio**: Our first separate brand: original 3D-printable designs for makers. - **2026, Browser extensions**: Bulk Post Scheduler for X, our first tool that runs in the browser. - **Next, New brands**: New websites for new audiences, each with its own name. ## Our portfolio - **Voxlo Studio** (brand, live): Original 3D-printable designs: toys, gadgets and puzzles that people print at home. Audience: Makers, 3D printing fans, Families. - **cliqtomedia.com** (website, live): Guides, tool pages and how-tos about web data, AI and online work. Audience: Marketers, Developers, Small businesses, Creators. - **Apify Actors** (product line, live): Apify Actors (web scrapers and data APIs): 150+ built, 103 live. People use them to get public web data without code. Audience: Data teams, Sales teams, Researchers. - **Browser extensions** (product line, live): Free tools that run in your own browser. The first one: Bulk Post Scheduler for X. Audience: Creators, Social media managers. - **Social channels** (channels, live): News, short demos and how-to articles for the people who use our sites and tools. Audience: Our readers, Our users. - **New brands** (in the works, next): New websites for new audiences. We add each brand here when it is ready. Audience: New audiences. ## How we work 1. **Audience**: We find a group of people with a clear need. 2. **Brand**: We give them a home: a brand, a website or a tool. 3. **Content**: We make guides, tools and posts that help them. 4. **Recommendations**: We recommend products that fit them, and mark partner links. Why separate brands? People trust a site that knows them well, so each audience gets its own brand. Every brand says openly that it belongs to Cliqto Media. ## Our principles - **Honest recommendations**: We recommend a product only if it helps the reader. - **Clear disclosure**: Every page with partner links says so, next to the links. - **Our own projects**: We do not take outside projects. Everything here is ours. - **Respect for people**: No spam, no pop-ups, no fake reviews. We never ask for passwords. - **Public data first**: Our Actors read public data. We respect site limits. - **Fast fixes**: If something breaks, tell us. We fix problems fast. ## Company facts - Name: Cliqto Media - Type: Independent digital media company - Since: 2020 - What we own: Brands, websites, Apify Actors and browser extensions - Brands: Voxlo Studio, more in the works - How we earn: Our own products and partner programs - Outside projects: None. We work only on our own projects - Website: cliqtomedia.com Press kit: https://cliqtomedia.com/press/ ## Where to find us - [Apify](https://apify.com/cliqtomedia?fpr=cliqto): All our Actors, ready to run - [X](https://x.com/CliqtoMedia): News and short tips - [LinkedIn](https://www.linkedin.com/company/cliqtomedia): Company news - [YouTube](https://www.youtube.com/@CliqtoMedia): Short demos - [Medium](https://medium.com/@cliqtomedia): How-to articles - [Bluesky](https://bsky.app/profile/cliqtomedia.com): News in short posts - [GitLab](https://gitlab.com/cliqtomedia): Our public projects ## Contact - Questions and support: hello@cliqtomedia.com - Partnerships: partners@cliqtomedia.com - Problems with an Actor: open the Actor on Apify and use the Issues tab We usually reply within 2 business days. ## Questions ### When did Cliqto Media start? In 2020. ### What does Cliqto Media do? We build our own brands, websites and tools, like Voxlo Studio, Apify Actors (150+ built, 103 live) and browser extensions. On our sites we recommend products we trust to the people who use them. ### Is Cliqto Media an agency? No. An agency works on other people's projects. We work only on our own brands, websites and products. ### How do you earn money? From our own products and from partner programs. When we recommend a product, we may earn a commission. You pay the same price. ### Are you part of Apify? No. We are an independent company. Our Actors run on the Apify platform. ### Can I suggest a new tool? Yes. [Suggest a tool](/partners/#suggest) on the Partners page. We read every idea, but we do not promise to build it. ### Are you the same as cliqto.com? No. cliqto.com is a different company. Cliqto Media is not connected to cliqto.com or to any company on that website. Our main website is cliqtomedia.com, and our email addresses end in @cliqtomedia.com. Our brands have their own sites, like voxlostudio.com. --- # Partners > Partner with Cliqto Media, an independent digital media company. We promote products we trust in guides, reviews and free tools on our own brands. URL: https://cliqtomedia.com/partners/ Cliqto Media is an independent digital media company. We promote products we trust on our own brands, websites and channels. ## Who we work with - **Affiliate programs**: you run a program for a product that real people use. - **Platforms and integrations**: our products may fit your users. - **API and data owners**: you have a public API or open data. - **Writers and creators**: you write or make videos about online tools. ## For affiliate programs - **Real audiences**: Each brand has its own readers. Your product appears where its users already are. - **A publisher, not a coupon site**: We write guides, reviews and tool pages. People read them to make a choice. - **We use what we recommend**: We use or test a product before we write about it. - **Safe for your brand**: Clear disclosure, no search ads on your brand name without your permission, no spam. We follow your program rules. ## Our properties - **Voxlo Studio** (brand, live): Original 3D-printable designs: toys, gadgets and puzzles that people print at home. Audience: Makers, 3D printing fans, Families. - **cliqtomedia.com** (website, live): Guides, tool pages and how-tos about web data, AI and online work. Audience: Marketers, Developers, Small businesses, Creators. - **Apify Actors** (product line, live): Apify Actors (web scrapers and data APIs): 150+ built, 103 live. People use them to get public web data without code. Audience: Data teams, Sales teams, Researchers. - **Browser extensions** (product line, live): Free tools that run in your own browser. The first one: Bulk Post Scheduler for X. Audience: Creators, Social media managers. - **Social channels** (channels, live): News, short demos and how-to articles for the people who use our sites and tools. Audience: Our readers, Our users. - **New brands** (in the works, next): New websites for new audiences. We add each brand here when it is ready. Audience: New audiences. We do not publish audience numbers on this page. Ask us, and we will share the facts that matter for your program. ## Programs that fit A great fit today: Software and SaaS, AI tools, Automation and no-code, CRM, email and sales tools, Hosting and domains, Proxies and data tools, Developer tools, Tools for creators, Video and social media tools, 3D printers and filament, 3D software and maker tools. Open to, with our new brands: Travel, Insurance, Banking and money, Education and languages, Other products for everyday life. Your product is in a different field? Tell us anyway. We do not promote a brand if one of our tools collects data from that brand's website. ## How we promote - **Brand websites**: Each audience gets its own site with its own name. - **Guides and how-tos**: Step by step: how a product works and how to start. - **Reviews and comparisons**: What we liked, what we did not, and who it is for. - **Free tools**: Tools and extensions that people use every day. - **Short videos**: Demos and tips on YouTube and social media. - **Social posts**: News and short tips on X, Medium and LinkedIn. ## How it works 1. **Write to us**: Send a link to your program and your terms. 2. **We check the fit**: Is the product right for one of our audiences? 3. **We try the product**: We use it or test it ourselves. 4. **We publish**: Guides, reviews or tool pages, with marked links. 5. **We keep it up to date**: We update the content when your product changes. ## Traffic sources Search engines, Our own social channels, Our product listings on Apify, Links from other sites. We do not buy clicks and we do not pay people to click. ## Compliance - Every partner link is marked, and each page with them says so - No search ads on your brand name without your permission - No coupon or cashback sites - No email spam, pop-ups or hidden links - No paid clicks and no fake traffic - No paid reviews ## Platforms and integrations Our Actors already work with Make, Zapier, n8n, Google Sheets and AI agents: https://cliqtomedia.com/actors/integrations/ ## API and data owners Do you have a public API or an open data source? We may make an Apify Actor for it. We decide what to make ourselves. ## Writers and creators We can share product facts, images or a sample of data from one of our Actors. ## Suggest a tool Send the website or source with example links, the data you need and how you will use it to partners@cliqtomedia.com. We read every idea, but we do not promise to make it. There is no price and no contract. ## What we do not do - We do not work on other people's projects or make tools to order. - We do not write paid reviews. A partner cannot buy a good review. - We do not hide partner links. - We do not use fake reviews, fake traffic or paid clicks. - We do not buy search ads on your brand name without your permission. - We do not send spam or mass messages. - We do not ask for, store or use anyone's passwords. - We do not access other people's private accounts. ## Contact Partnerships: partners@cliqtomedia.com. Product questions: hello@cliqtomedia.com. We usually reply within 2 business days. ## Questions ### What kind of company is Cliqto Media? An independent digital media company. We build our own brands, websites and tools, and we recommend products we trust to the people who use them. ### Do you work only with software and tech products? No. Each of our brands has its own audience. Today we fit software, web and data, creator tools and 3D printing. We are working on new brands for new audiences. ### Where will my product appear? On the site whose readers need it: in guides, reviews and product pages. Sometimes also on our social accounts. ### How do you promote? With content only. We always mark partner links. No coupon sites, no search ads on your brand name without your permission, no spam. ### Can I pay for a review? No. We write about a product only if it fits our readers. Partner links never change what we say. ### Do you make tools to order? No. We make only our own products. You can [suggest a tool](#suggest), and we decide if we make it. ### Can I get sample data for an article? Yes. Tell us about your article or video and which Actor you want to show. --- # What people do with our Actors > Nine ways to use our Apify Actors: lead lists, prices, reviews, SEO, social listening, content and more. Each with steps and sample data. URL: https://cliqtomedia.com/actors/use-cases/ Our Apify Actors collect public web data. Pick a use case. Each page shows the Actors, the steps and a sample result. ## Use cases - [Lead lists from public data](https://cliqtomedia.com/actors/use-cases/lead-generation/): Build lists of companies and contacts from public sites. Check emails and phones before you send. (13 tools) - [Reach out when the company is ready](https://cliqtomedia.com/actors/use-cases/buying-signals/): Know when a company hires, raises money or wins a contract. Reach out at the right moment. (12 tools) - [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/): See what your competitors launch, hire, change and advertise. Every week, without opening their sites. (11 tools) - [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/): Track prices and offers in shops and marketplaces. See changes before your customers do. (14 tools) - [Read new reviews, yours and theirs](https://cliqtomedia.com/actors/use-cases/review-monitoring/): Collect reviews from the App Store, Google Play and more. Find what people love and what they hate. (7 tools) - [SEO data without a big suite](https://cliqtomedia.com/actors/use-cases/seo-research/): Collect keyword ideas and check your pages and your rivals' pages. Search results and trends coming soon. (11 tools) - [Hear what people say about you](https://cliqtomedia.com/actors/use-cases/social-listening/): Find what people say about your brand and your topic on Bluesky, Hacker News, YouTube and more. (12 tools) - [One piece of content, ten new posts](https://cliqtomedia.com/actors/use-cases/content-repurposing/): Turn videos, podcasts, PDFs and articles into clean text. Make posts, notes and AI drafts from it. (10 tools) - [Find the right creators, fast](https://cliqtomedia.com/actors/use-cases/creator-outreach/): Find podcasts, YouTube channels and newsletters in your niche, with public contact details. (8 tools) ## How every Actor works 1. **Pick the sources**: Websites, registers, app stores, feeds or social sites 2. **Run on a schedule**: Daily, weekly or hourly runs in the Apify cloud 3. **Clean and check**: Tidy fields, checked contacts, only new items 4. **Send to your tools**: Google Sheets, CRM, Make, Zapier, n8n or your AI agent ## By team - **Growth and sales**: Fresh lead lists and the right moment to reach out. (Lead lists, Buying signals) - **Product marketing**: Know what rivals launch and what customers say. (Competitor watch, Review monitoring) - **SEO and content**: Real search data and more posts from every video. (SEO research, Content repurposing) - **E-commerce**: Daily prices, offers and reviews in your market. (Price tracking, Review monitoring) - **Brand and PR**: Hear every mention and find the right creators. (Social listening, Creator outreach) - **Agencies**: Use the same Actors on many projects. (Lead lists, Competitor watch, SEO research) ## Questions ### What is on this page? Common ways to use our Apify Actors. They collect public data: leads, prices, reviews, posts, search data and text. Some pages also show our browser extension. ### Do your Actors send emails or post for us? Our Actors collect and prepare data. You keep your own email tool, CRM and social accounts. You can connect the data to them with Make, Zapier or n8n. Our extension for X adds posts to X's own Scheduled list. ### How fast can we start? On the same day. Make a free Apify account, open an Actor, fill the form and click Start. Then add a schedule. ### Is the data legal to use? Our Actors collect public data only. You are responsible for how you use it, for example GDPR rules when you contact people. Read the [Terms](/legal/terms/). ### What if my use case is not here? [Suggest a tool](/partners/#suggest). We read every idea, but we do not promise to build it. --- # Lead lists from public data > Build lead lists from public sites and registers. Check emails, phones and VAT numbers. Send clean rows to your CRM. Pay per result on Apify. URL: https://cliqtomedia.com/actors/use-cases/lead-generation/ Collect companies and their public contacts from websites, directories and official registers. Check emails and phones. Get one clean row per lead, ready for your CRM. ## The task Most sales and marketing teams build lead lists by hand. Someone opens a directory, copies a company name, finds the website, looks for an email and pastes it into a sheet. It takes hours. Some emails may be old or wrong. Our Actors do the copy and paste. They read public pages and official registers, find contacts, and check them. You start your day with a list, not with a blank sheet. | By hand | With our Actors | |---|---| | Copy companies from directories by hand | Companies from directories and registers in one table | | Guess emails and hope they work | Every email checked for format and mail domain | | No way to know the company size or stack | Tech stack, country and register data in each row | | Old lists with dead contacts | Run again every month to keep the list fresh | ## How it works 1. **Find companies**: Directories, startup lists and company registers 2. **Get contacts**: Public emails, phones and social links from each website 3. **Check them**: Email, phone and VAT checks remove bad rows 4. **Send to CRM**: HubSpot, Google Sheets, Airtable or a CSV file ## Tools for this use case - [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/) (live): Add a list of company websites. - [Bulk Email Verifier: MX, Disposable, Role & Typo Check](https://cliqtomedia.com/actors/email-verifier/) (live): Paste email addresses or pick a dataset from a lead scraper. - [Phone Number Validator & Formatter - Bulk E.164, No Login](https://cliqtomedia.com/actors/phone-number-validator/) (live): Paste phone numbers in any format. - [Website Tech Stack Detector: CMS, Versions & CDN, No Login](https://cliqtomedia.com/actors/tech-stack-detector/) (live): Paste a list of websites. The tool checks each live page against 7,600+ technology fingerprints. You get one row per site with CMS, shop… - [EU VAT Number Validator (VIES) - Bulk Check, No Login](https://cliqtomedia.com/actors/vat-number-validator/) (live): Paste a list of EU VAT numbers. - [Europages Scraper: B2B Suppliers & Certificates (No Login)](https://cliqtomedia.com/actors/europages-companies-scraper/) (live): Search Europages by product and country. - [YC Companies Scraper: Founders & Jobs, No Login](https://cliqtomedia.com/actors/y-combinator-companies/) (live): Pick a YC batch, industry or region. - [France Company & SIRET Search](https://cliqtomedia.com/actors/france-sirene-company-search/) (live): Check French companies by SIREN, SIRET or VAT number. - [Norway Company Register (Brreg) & Updates](https://cliqtomedia.com/actors/norway-brreg-company-register/) (live): Look up Norwegian companies by organisation number, or search the register with filters. - [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/) (live): Paste a list of domains. For each one, you get registrar, dates and days until expiry from the official registry. You also get live DNS… - [Bulk Email List Validator: Clean CSV, No Login](https://cliqtomedia.com/actors/bulk-email-validator/) (coming soon): Upload your email list as a CSV or Google Sheet link. - [Finland Company Register (PRH YTJ)](https://cliqtomedia.com/actors/finland-ytj-company-register/) (coming soon): Check Finnish companies by Business ID (Y-tunnus), or search by name and town. - [LEI Lookup & Change Monitor (GLEIF)](https://cliqtomedia.com/actors/lei-gleif-lookup/) (coming soon): Paste LEI codes or a company name. ## Example workflow 1. **Pick your market**: For example: software companies in Norway, or new Y Combinator startups. 2. **Collect the companies**: Run a register or directory tool. You get names, websites and register IDs. 3. **Add contacts**: Give the websites to Website Contact Scraper. It finds public emails, phones and social profiles. 4. **Clean the list**: Run Email Verifier and Phone Number Validator. Keep only the rows that pass. 5. **Send and repeat**: Send the rows to your CRM with Make, Zapier or n8n. Schedule the run every month. Example result row: company = Example Apps AS, website = example.com, email = hello@example.com, email_status = deliverable, phone = +47 …, tech = WordPress, HubSpot, country = NO Send the data to: HubSpot, Google Sheets, Airtable, Make, Zapier, n8n. ## Who uses it - **Sales teams**: Fill the pipeline with fresh, checked contacts every week. - **Agencies**: Build lead lists for each project. - **Founders**: Build a list of your first 100 prospects in one evening. ## Questions ### Do you sell lead lists? No. We make tools. You run them and you own the data. This way the list is always fresh and fits your market. ### Is it legal to collect business contacts? Our tools read only public pages and open registers. Laws like GDPR still apply to how you use the data. Read [our note on web scraping and the law](/faq/#is-web-scraping-legal). ### How do I avoid bounced emails? Run every list through Email Verifier before you send. It checks the format, the domain and its mail (MX) records. It does not check the mailbox itself, so a few emails can still bounce. Bulk Email Validator for CSV lists is coming soon. ### Can I get leads for one country only? Yes. Use a company register for that country, or filter directory results by country. ## More use cases - [Reach out when the company is ready](https://cliqtomedia.com/actors/use-cases/buying-signals/) - [Find the right creators, fast](https://cliqtomedia.com/actors/use-cases/creator-outreach/) - [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/) --- # Reach out when the company is ready > Get alerts when companies hire, raise money or win public contracts. Daily monitors for job boards, SEC Form D, tenders and startup lists. URL: https://cliqtomedia.com/actors/use-cases/buying-signals/ A company that hires ten engineers, raises a round or wins a public contract needs new tools now. Our monitors watch these signals every day and tell you who is new. ## The task Timing is half of a good sales email. The same message works much better the week a company starts to grow. But nobody can check hundreds of career pages and filings every day. Our monitors can. They check job boards, funding filings, startup lists and public tenders on a schedule. Each run shows only what is new since the last run. | By hand | With our Actors | |---|---| | Check career pages one by one | New job posts from 15+ hiring systems in one feed | | Hear about a funding round weeks later | New Form D filings every morning | | Miss public tenders in your field | New tenders and federal awards by keyword | | Send the same email to everyone | Write to companies that just started to grow | ## How it works 1. **Watch sources**: Career pages, SEC filings, tenders, startup lists 2. **Run daily**: A schedule on Apify, no server to run 3. **Keep only new**: Each run marks new, changed and removed items 4. **Alert the team**: Email, Slack, CRM task or Google Sheets ## Tools for this use case - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) (live): Add the Greenhouse boards of companies you follow. - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) (live): Add a Lever company name or board link. - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) (live): Add a known Ashby board name, like ramp. - [Workable Jobs Monitor & Scraper](https://cliqtomedia.com/actors/workable-jobs-monitor-scraper/) (live): Add Workable companies, or search Workable jobs by keyword and place. - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) (live): Name the SmartRecruiters companies you follow. - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) (live): Enter a Recruitee company name or link. - [Personio Vacancy Watch](https://cliqtomedia.com/actors/personio-jobs-monitor-scraper/) (live): Add the Personio board of a company you know. - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) (live): Pick a role and a location, or paste a Wellfound job link. - [SEC Form D Filing Monitor](https://cliqtomedia.com/actors/sec-edgar-form-d-funding-monitor/) (live): Find public Form D and D/A filings in SEC EDGAR by date or CIK. - [YC Companies Scraper: Founders & Jobs, No Login](https://cliqtomedia.com/actors/y-combinator-companies/) (live): Pick a YC batch, industry or region. - [USAspending Federal Awards & Recipient Monitor](https://cliqtomedia.com/actors/usaspending-federal-awards-monitor/) (live): Find US federal contracts, grants and loans from USAspending.gov. - [EU TED Tenders Scraper & Monitor](https://cliqtomedia.com/actors/eu-ted-tenders-scraper/) (live): Find EU public tenders on TED with your own filters. ## Example workflow 1. **Choose a signal**: Hiring for a role, a new funding filing, or a tender with your keyword. 2. **Add your targets**: Paste the career pages of your target companies, or set a keyword and a country. 3. **Schedule it**: Run the monitor every day. It remembers what it saw last time. 4. **Get only news**: Each run gives only new items. No noise from old posts. 5. **Act fast**: Send new signals to your CRM or team chat with Make, Zapier or n8n. Example result row: company = Acme Robotics, signal = new job post, title = Head of Growth, location = Berlin, first_seen = 2026-10-14, change = new, url = boards.greenhouse.io/… Send the data to: HubSpot, Google Sheets, Slack, Make, Zapier, n8n. ## Who uses it - **Sales teams**: Write to companies in the week they grow. - **Recruiting agencies**: See which companies open new roles first. - **Investors and analysts**: Track hiring and funding across a market. ## Questions ### What is a buying signal? An event that shows a company may need to buy soon. For example: new hires in one team, a funding round, a new office or a won contract. ### How do the monitors know what is new? Each monitor saves what it saw in the last run. The next run compares and marks items as new, changed or removed. ### Which hiring systems do you cover? Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio and many more. See [Jobs and hiring](/actors/jobs/). ### Can I get the alerts in Slack? Yes. Connect the run to Slack with Make, Zapier or n8n. Apify can also call a webhook after each run. ## More use cases - [Lead lists from public data](https://cliqtomedia.com/actors/use-cases/lead-generation/) - [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/) - [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/) --- # Know what your competitors do > Track competitor ads, launches, job posts, site changes and releases. Collect the facts each week in your own sheet. Status pages coming soon. URL: https://cliqtomedia.com/actors/use-cases/competitor-monitoring/ Their new ads, new pages, new jobs and new releases tell you their plan. Our tools collect these facts on a schedule and put them in one sheet. ## The task Most teams look at competitors only when something goes wrong. Then they open ten tabs and try to guess what changed. The picture is never complete. With a few scheduled runs you see the changes as they happen: a new ad message, a new pricing page, ten new sales jobs or a new product launch. | By hand | With our Actors | |---|---| | Look at competitor sites only from time to time | A weekly list of new pages and changed titles | | Hear about a launch from customers | Launches and releases in one feed (status pages coming soon) | | No history of their ads | Their Google ads from the Ads Transparency Center | | Guess their next step | New jobs show where they invest | ## How it works 1. **List competitors**: Their domains, career pages and product pages 2. **Run weekly**: Ads, sitemaps, jobs, launches and releases 3. **Compare**: New pages, new ads, new jobs, new versions 4. **Share the report**: Google Sheets, Notion or your team chat ## Tools for this use case - [Google Ads Transparency Scraper - Ad Text, No Login](https://cliqtomedia.com/actors/google-ads-transparency-scraper/) (live): See which ads a brand runs on Google. - [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/) (live): Turn a sitemap into a clean list of page URLs. - [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/) (live): Get the title, description, canonical and social tags of up to 100 pages. - [Website Tech Stack Detector: CMS, Versions & CDN, No Login](https://cliqtomedia.com/actors/tech-stack-detector/) (live): Paste a list of websites. The tool checks each live page against 7,600+ technology fingerprints. You get one row per site with CMS, shop… - [Product Hunt Launches Scraper – Daily Top, No Login](https://cliqtomedia.com/actors/product-hunt-launches/) (live): Get Product Hunt daily leaderboards for any day or period up to 31 days. - [GitHub Releases Monitor & Scraper](https://cliqtomedia.com/actors/github-releases-monitor-scraper/) (live): Add up to 10 public repositories and get their releases as rows. - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) (live): Add the Greenhouse boards of companies you follow. - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) (live): Add a Lever company name or board link. - [Google Search Results Scraper (SERP) - No Login, Per Page](https://cliqtomedia.com/actors/google-search-scraper/) (live): Add keywords and get Google results as rows. - [Trustpilot Reviews Scraper - Ratings & Replies, No Login](https://cliqtomedia.com/actors/trustpilot-reviews-scraper/) (live): Add a company domain and get its public Trustpilot reviews in a table. - [Statuspage Incidents Monitor — Vendor Status & Changes](https://cliqtomedia.com/actors/statuspage-incidents-monitor/) (coming soon): Check the status pages of vendors you use, like GitHub or Cloudflare. ## Example workflow 1. **List the competitors**: Write down their domains, career pages and product names. 2. **Watch their site**: XML Sitemap URLs Extractor shows new pages. Website Metadata shows new titles and texts. 3. **Watch their ads**: Google Ads Transparency Scraper shows which ads they run and where. 4. **Watch their moves**: Jobs, launches and releases show where they invest. Status pages: after release. 5. **Read one report**: Send all results to one Google Sheet with a tab per source. Example result row: competitor = rival.com, source = sitemap, change = new page, url = rival.com/pricing-teams, title = Pricing for teams, seen = 2026-10-15 Send the data to: Google Sheets, Notion, Slack, Airtable, Make, Zapier. ## Who uses it - **Marketing teams**: See competitor messages and offers each week. - **Product managers**: Track their launches, releases and job posts. - **Agencies**: Use the same report on many projects. ## Questions ### Is competitor monitoring legal? Our tools read public pages only: ads in the official transparency center, public sitemaps, public job posts. We do not log in to any account. ### How often should I run it? Weekly is enough for most teams. Run ads and pricing pages daily in busy markets. ### Can I see their Facebook ads too? Our current tools cover Google ads. Need another ad platform? [Suggest a tool](/partners/#suggest). We read every idea, but we do not promise to build it. ### Do I need to write code? No. Each tool has a simple form. You can send results to Google Sheets without writing code. ## More use cases - [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/) - [SEO data without a big suite](https://cliqtomedia.com/actors/use-cases/seo-research/) - [Read new reviews, yours and theirs](https://cliqtomedia.com/actors/use-cases/review-monitoring/) --- # Track prices in shops and marketplaces > Track product prices online: idealo, Trendyol, eBay sold prices, Naver Shopping, Australian supermarkets, any shop's product data and FX rates. URL: https://cliqtomedia.com/actors/use-cases/price-monitoring/ Watch prices, offers and sellers in online shops and marketplaces. Get one table with every product and every change. Use it to set your prices and plan promotions. ## The task Online prices change many times a week. Sellers who check by hand see the change too late, or they only check five products out of five hundred. Our shop and marketplace tools read product pages and search results on a schedule. You get the price, the seller, the stock and the time, for every product you care about. | By hand | With our Actors | |---|---| | Check a few competitor prices by hand | Many products checked every day | | Find a price drop after sales fall | Alerts when a price goes down | | No history to plan promotions | Price history in your own sheet | | Prices in many currencies | Prices in one currency, with daily exchange rates | ## How it works 1. **List products**: Search words, product links or shop pages 2. **Run on schedule**: Daily or hourly runs on Apify 3. **Clean prices**: Price, currency, seller, stock and time 4. **Use the data**: Sheets, BI tools or your repricing rules ## Tools for this use case - [Historical Exchange Rates & Currency Converter](https://cliqtomedia.com/actors/historical-fx-rates-converter/) (live): Get official ECB exchange rates for any pair and date since 1999. - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) (live): Read JSON-LD structured data from a list of web pages. - [Idealo Price Scraper: All Shop Offers, 6 Countries, No Login](https://cliqtomedia.com/actors/idealo-price-scraper/) (live): Search idealo or paste product links. - [AliExpress Scraper: Products, Prices & Reviews, No Login](https://cliqtomedia.com/actors/aliexpress-scraper/) (live): Type keywords to get AliExpress products, or paste product links to get reviews. - [eBay Sold Listings Scraper - Sold Prices & Dates](https://cliqtomedia.com/actors/ebay-sold-listings/) (live): Search eBay sold and completed listings by keyword. - [Trendyol Scraper: Products, Prices & Reviews (No login)](https://cliqtomedia.com/actors/trendyol-scraper/) (live): Add a keyword or product links from Trendyol, Turkey's largest online marketplace. - [Naver Shopping Scraper: Korea Products & Prices](https://cliqtomedia.com/actors/naver-shopping-scraper/) (live): Search Naver Shopping, Korea's largest shopping search, by keyword. - [Coles, Woolworths & Aldi Price Scraper - No Login](https://cliqtomedia.com/actors/au-supermarket-prices/) (live): Search Coles, Woolworths and Aldi Australia at once and get one price table. - [Google Shopping Scraper - Prices, Stores & Offers, No Login](https://cliqtomedia.com/actors/google-shopping-scraper/) (coming soon): Add product searches and pick a country. - [Wildberries Scraper: Products, Prices, Reviews, No Login](https://cliqtomedia.com/actors/wildberries-scraper/) (coming soon): Search Wildberries by keyword, or paste article numbers. - [JD.com Products Scraper](https://cliqtomedia.com/actors/jd-com-scraper/) (coming soon): Type Chinese keywords or paste JD.com links and get products as rows. - [Marketplace Seller Fee Calculator](https://cliqtomedia.com/actors/marketplace-fee-calculator/) (coming soon): Enter a sale price and item cost. - [Vinted Scraper - Listings, Prices & Brands in 25 Countries](https://cliqtomedia.com/actors/vinted-scraper/) (coming soon): Search Vinted like on the website and get a clean list of items. - [Wallapop & Poshmark Scraper - Secondhand Listings, No Login](https://cliqtomedia.com/actors/secondhand-listings-scraper/) (coming soon): Search Wallapop in Spain, Italy or Portugal, or Poshmark in the US or Canada. ## Example workflow 1. **Choose the products**: Use search words like "wireless earbuds", or paste product links. 2. **Pick the markets**: Live now: idealo, Trendyol, eBay sold listings, Naver Shopping or Australian supermarkets. After release: Google Shopping, AliExpress or Wildberries. 3. **Schedule the run**: Daily is enough for most shops. Hourly works for fast markets. 4. **Compare and alert**: Keep a price history in Google Sheets. Send an alert when a price drops. 5. **Check your margin**: After release: Marketplace Fee Calculator will show the real profit after fees. Example result row: product = Wireless earbuds X2, price = 49.90, currency = EUR, seller = TopTech, in_stock = true, checked_at = 2026-10-16 08:00 Send the data to: Google Sheets, Google BigQuery, Airtable, Make, Zapier, n8n. ## Who uses it - **E-commerce sellers**: Set prices with real market data every day. - **Brands**: See how resellers price your products. - **Market analysts**: Build price indexes and track trends. ## Questions ### Which shops and marketplaces do you cover? Live today: idealo, Trendyol, product data from any shop that publishes it (JSON-LD), eBay sold listings, Naver Shopping, Coles, Woolworths and Aldi in Australia, and daily exchange rates. The eBay tool needs your own eBay session or an API key. Coming soon: Google Shopping, AliExpress, Wildberries, JD.com, Vinted, and the second-hand sites Wallapop and Poshmark. See [E-commerce and prices](/actors/ecommerce/). ### Can I track the same product in many shops? Today, run the JSON-LD tool on each shop's product page. idealo already shows offers from many shops for one product. After release, Google Shopping will too. ### How do I get an alert on a price drop? Send results to Google Sheets and use a simple rule in Make, Zapier or n8n: if the new price is lower, send a message. ### How much does it cost? You pay per result on Apify. For example, one product price is one result. Each tool page shows its price. ## More use cases - [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/) - [Read new reviews, yours and theirs](https://cliqtomedia.com/actors/use-cases/review-monitoring/) - [Reach out when the company is ready](https://cliqtomedia.com/actors/use-cases/buying-signals/) --- # Read new reviews, yours and theirs > Collect and track reviews from the Apple App Store, Google Play and TrustRadius. Trustpilot and OpenTable coming soon. Find complaints early. URL: https://cliqtomedia.com/actors/use-cases/review-monitoring/ Collect reviews from app stores and TrustRadius on a schedule. Read new reviews in one place, see the rating trend, and learn from your competitors' customers too. ## The task Reviews are free market research. But they live on many sites, and new ones arrive every day. Teams read a few, miss the rest, and answer bad reviews too late. Our review tools collect the reviews each source makes available, with rating, date, text and reply. Limits depend on the tool. Run them every day and you see new complaints the same morning. | By hand | With our Actors | |---|---| | Read reviews site by site | Reviews from app stores and review sites in one table | | See a bad review a week later | Fresh reviews in your table every morning | | No numbers on what people complain about | Rating trends, and text ready for AI to group by topic | | No view of competitor reviews | The same data for your competitors | ## How it works 1. **Pick the pages**: Your company, your apps and your competitors 2. **Run daily**: A fresh snapshot of recent reviews 3. **Read and group**: Rating, date, text, reply, country 4. **Act**: Support tickets, product notes, marketing quotes ## Tools for this use case - [Trustpilot Reviews Scraper - Ratings & Replies, No Login](https://cliqtomedia.com/actors/trustpilot-reviews-scraper/) (live): Add a company domain and get its public Trustpilot reviews in a table. - [Apple App Store Reviews Scraper](https://cliqtomedia.com/actors/apple-app-store-reviews-scraper/) (live): Export public App Store reviews for your apps and countries. - [Google Play Reviews Scraper](https://cliqtomedia.com/actors/google-play-reviews-scraper/) (live): Export written Google Play reviews for your apps. - [TrustRadius Reviews Scraper](https://cliqtomedia.com/actors/trustradius-reviews-scraper/) (live): Get public TrustRadius software reviews as clean rows. - [OpenTable Reviews & Restaurants Scraper, No Login](https://cliqtomedia.com/actors/opentable-reviews-scraper/) (live): Get OpenTable guest reviews with detailed ratings and owner replies. - [App Store Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/app-store-apps-search/) (live): Search the Apple App Store for many keywords in many countries at once. - [Google Play Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/google-play-apps-search/) (live): Search Google Play for many keywords in many countries in one run. ## Example workflow 1. **Add the pages**: Your app IDs and the same for 2–3 competitors. Trustpilot pages after release. 2. **Run the tools**: Get reviews with rating, date, country and text. 3. **Schedule it**: Each daily run collects a fresh snapshot. It can include reviews you already have. 4. **Merge by review ID**: Each review has a stable ID. Add new IDs and update changed reviews. 5. **Group by topic**: Give the text to an AI tool or a simple sheet formula: price, bugs, support, delivery. 6. **Close the loop**: Send bad reviews to support and good ones to marketing. Example result row: source = Google Play, app = com.example.app, rating = 2, date = 2026-10-15, text = The new update logs me out…, reply = null Send the data to: Google Sheets, Airtable, Notion, Claude, Make, Zapier. ## Who uses it - **App teams**: Find bugs from reviews the day after a release. - **Brand and support teams**: Answer bad reviews fast. - **Product marketers**: Find real customer words for ads and pages. ## Questions ### Can I collect reviews of my competitors? Yes. Reviews on these sites are public. You can collect them for any company or app. ### Can I filter by country or language? Yes. The app store tools work per country. After release, Trustpilot reviews will include the reviewer's country. ### How do I see only new reviews? The tools do not return only new reviews. Each run is a fresh snapshot. Merge the rows by review ID. Keep new IDs and update changed reviews. ### Can AI read the reviews for me? Yes. The output is clean text. Send it to Claude or ChatGPT and ask for the top complaints. See [AI agents](/actors/ai-agents/). ## More use cases - [Hear what people say about you](https://cliqtomedia.com/actors/use-cases/social-listening/) - [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/) - [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/) --- # SEO data without a big suite > SEO data from our Apify Actors: autocomplete keyword ideas, structured data, sitemaps and URL status checks. Google results and Trends coming soon. URL: https://cliqtomedia.com/actors/use-cases/seo-research/ Get keyword ideas and check your pages. Find what to fix. Search results and trends are coming soon. ## The task Good SEO needs a lot of data: where you rank, what people search, which pages are broken, what your rivals publish. Collecting it by hand is slow, and many SEO suites cost hundreds per month. Our tools collect this data on demand. You pay for the results you get, and you keep the data in your own sheets. | By hand | With our Actors | |---|---| | Check rankings by hand in a private window | Search results for your keywords on a schedule (coming soon) | | Guess keyword ideas | Hundreds of real search ideas from autocomplete | | Find broken links after traffic drops | Status, redirects and metadata for every URL | | Pay for a big suite you use 10% of | Pay per result, keep the data | ## How it works 1. **Keywords and URLs**: Your keywords, your sitemap, rival domains 2. **Collect**: Keyword ideas and page data. Search results and trends soon 3. **Check**: Status codes, titles, structured data 4. **Report**: Google Sheets, Looker Studio, BigQuery ## Tools for this use case - [Google Search Results Scraper (SERP) - No Login, Per Page](https://cliqtomedia.com/actors/google-search-scraper/) (live): Add keywords and get Google results as rows. - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) (live): Get the phrases Google suggests when people start typing. - [Google Trends Scraper - Interest & Related, No Login](https://cliqtomedia.com/actors/google-trends-scraper/) (live): Get Google Trends data for many keywords in one run. - [Google News Scraper - Real Article URLs, No Login](https://cliqtomedia.com/actors/google-news-scraper/) (live): Search Google News by keyword, topic or Top stories. - [Google Images Scraper - Image URLs, Sizes & Source Pages](https://cliqtomedia.com/actors/google-images-scraper/) (live): Type a search phrase and get Google Images results as a table. - [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/) (live): Turn a sitemap into a clean list of page URLs. - [Link Route Audit — Bulk HTTP Status & Redirects](https://cliqtomedia.com/actors/bulk-url-status-redirect-checker/) (live): Paste a list of URLs and see where each one ends up. - [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/) (live): Get the title, description, canonical and social tags of up to 100 pages. - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) (live): Read JSON-LD structured data from a list of web pages. - [DuckDuckGo & Bing Search Scraper - No Login, Real URLs](https://cliqtomedia.com/actors/duckduckgo-bing-search/) (coming soon): Add keywords and get DuckDuckGo and Bing results as rows. - [Wikipedia Pageviews & Trends Monitor](https://cliqtomedia.com/actors/wikipedia-pageviews-monitor/) (coming soon): See how many people read a Wikipedia article each day or month. ## Example workflow 1. **Find keyword ideas**: Google Autocomplete Scraper turns one seed word into hundreds of real searches. 2. **Check the demand**: After release: Google Trends Scraper will show interest over time and by country. 3. **Track the results**: After release: Google Search Scraper will save the top results for each keyword on a schedule. 4. **Audit your site**: Get all URLs from the sitemap, then check status, titles and structured data. 5. **Report**: Send everything to Google Sheets or BigQuery for your dashboard. Example result row: url = example.com/old-running, statusCode = 301, isRedirect = true, finalUrl = example.com/running, isBroken = false, checkedAt = 2026-10-16 Send the data to: Google Sheets, Google BigQuery, Airtable, Make, n8n, Python. ## Who uses it - **SEO specialists**: Get keyword and audit data without a big suite. - **Content teams**: Find topics people really search for. - **Agencies**: Run the same checks on many sites. ## Questions ### Can it replace my SEO suite? No. It covers data tasks like keyword ideas and site checks. Rank checks are coming soon. Big suites also have backlink data and reports, which we do not cover. ### Can I track rankings in another country? After the search Actors are released. Their inputs let you choose the country and language. ### How many URLs can I check? The sitemap tool can list thousands of URLs. The status and metadata checks take up to 100 URLs per run, so split a big list into a few runs. You pay per result, so a small check costs very little. ### Where can I see the results? Download a CSV, or send the data to Google Sheets, BigQuery or Looker Studio. ## More use cases - [One piece of content, ten new posts](https://cliqtomedia.com/actors/use-cases/content-repurposing/) - [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/) - [Hear what people say about you](https://cliqtomedia.com/actors/use-cases/social-listening/) --- # Hear what people say about you > Track brand mentions and topics on Bluesky, Hacker News, YouTube comments and Substack. Reddit, Threads and Telegram coming soon. Daily runs, clean data. URL: https://cliqtomedia.com/actors/use-cases/social-listening/ Find posts and comments about your brand, your rivals and your topic on many social sites. Get them in one table every day. Spot problems, ideas and trends early. ## The task People talk about products in many places: Bluesky posts, Hacker News threads, YouTube comments, newsletters. Brands that listen find ideas and problems early. Brands that do not, find them late. Social listening suites are expensive. Our tools give you the raw posts and comments for a small price per result, so you can listen to the places that matter to you. | By hand | With our Actors | |---|---| | Search each site by hand | Mentions from many sites in one feed | | Miss a viral complaint | New posts every morning | | No data for content ideas | Real questions to answer in your content | | Pay a lot for a listening suite | Pay for the posts you collect | ## How it works 1. **Set keywords**: Your brand, your rivals, your topic 2. **Search the sites**: Bluesky, Hacker News, YouTube and more 3. **Collect posts**: Text, author, date, likes and link 4. **Read and act**: Sheets, AI summary or team chat ## Tools for this use case - [Reddit Scraper: Posts, Comments & Subreddits (No login)](https://cliqtomedia.com/actors/reddit-scraper/) (live): Get public Reddit posts and comments as clean rows. - [Bluesky Scraper — Posts, Profiles, Feeds & Threads, No Login](https://cliqtomedia.com/actors/bluesky-scraper/) (live): Get public Bluesky posts, profiles, threads and feeds as clean rows. - [Threads Scraper — Posts, Profiles, Replies & Search](https://cliqtomedia.com/actors/threads-scraper/) (live): Get public Threads posts without login. - [Hacker News Stories & Comments Scraper](https://cliqtomedia.com/actors/hacker-news-stories-comments-scraper/) (live): Export Hacker News stories and comments as rows. - [Telegram Channel Scraper - Posts & Views, No Login](https://cliqtomedia.com/actors/telegram-channel-scraper/) (live): Get posts from public Telegram channels as clean rows. - [YouTube Comments Scraper](https://cliqtomedia.com/actors/youtube-comments-scraper/) (live): Export public comments and replies from YouTube videos. - [Substack Newsletter Scraper](https://cliqtomedia.com/actors/substack-newsletter-scraper/) (live): Get post data from public Substack feeds. - [Medium Article Scraper: Tags, Authors & Publications](https://cliqtomedia.com/actors/medium-articles-scraper/) (live): Get the newest Medium stories by tag, author or publication. - [Pinterest Search Scraper: Pins & Boards, No Login](https://cliqtomedia.com/actors/pinterest-search-scraper/) (live): Get pins and boards from Pinterest search, boards and profiles. - [Weibo Scraper: Posts, Comments & Profiles, No Login](https://cliqtomedia.com/actors/weibo-scraper/) (live): Get public Weibo data without login. - [Bilibili Scraper: Videos, Comments & Creators, No Login](https://cliqtomedia.com/actors/bilibili-scraper/) (live): Get public Bilibili data in clean rows. - [Quora Answers Scraper: Upvotes, Views & Authors, No Login](https://cliqtomedia.com/actors/quora-scraper/) (coming soon): Get public Quora answers for a question or a topic. ## Example workflow 1. **Write your keywords**: Your brand name, product names, rival names and 3–5 topic words. 2. **Pick the places**: Hacker News for tech, Bluesky for news, YouTube for reviews. Reddit and Threads after release. 3. **Run every day**: Each run collects new posts and comments with a link to each. 4. **Summarize**: Send the text to an AI tool for a short daily summary. 5. **Answer and create**: Reply where it matters. Turn real questions into posts and FAQs. Example result row: site = bluesky, handle = @brand.bsky.social, text = Has anyone tried…, author = @…, likes = 42, date = 2026-10-15, url = bsky.app/profile/… Send the data to: Google Sheets, Notion, Claude, Telegram, Make, n8n. ## Who uses it - **Brand managers**: See mentions and complaints early. - **Content teams**: Find real questions and hot topics. - **Community managers**: Join the right threads at the right time. ## Questions ### Which social sites do you cover? Live now: Bluesky, Hacker News, YouTube comments, Substack, Pinterest and Bilibili. Coming soon: Reddit, Threads, Quora, Telegram channels, Medium and Weibo. See [Social media](/actors/social/). ### Do I need an account on these sites? No. The tools read public posts and pages. You do not log in. ### Can I get a daily summary? Yes. Send the posts to Claude or ChatGPT with a short prompt, and post the summary to your team chat. ### Is it private data? No. We collect only public posts. Do not use the data to target private people. Read [our FAQ](/faq/#is-web-scraping-legal). ## More use cases - [Read new reviews, yours and theirs](https://cliqtomedia.com/actors/use-cases/review-monitoring/) - [One piece of content, ten new posts](https://cliqtomedia.com/actors/use-cases/content-repurposing/) - [Find the right creators, fast](https://cliqtomedia.com/actors/use-cases/creator-outreach/) --- # One piece of content, ten new posts > Turn YouTube videos, podcasts, PDFs, RSS feeds and web pages into clean text and Markdown. Feed it to AI to make posts, newsletters and summaries. URL: https://cliqtomedia.com/actors/use-cases/content-repurposing/ Get transcripts from videos and podcasts, and clean text from articles, PDFs and feeds. Then use AI to turn one piece of content into posts, newsletters and summaries. ## The task A one-hour video or podcast has enough ideas for a month of posts. But first you need the text. Typing it by hand is slow, and copy from web pages comes with menus, ads and broken lines. Our tools give you clean text and Markdown, ready for AI. Add a short prompt and you have drafts for posts, threads, emails and blog articles. | By hand | With our Actors | |---|---| | Watch a video again to write notes | Full transcripts in minutes | | Copy text with ads and menus | Clean text from web pages and PDFs | | Start every post from zero | AI drafts from your own best content | | Content lives in one format only | One video becomes posts, threads and a newsletter | ## How it works 1. **Pick content**: Videos, podcasts, PDFs, articles or RSS feeds 2. **Get clean text**: Transcripts and Markdown without noise 3. **Rewrite with AI**: Claude, ChatGPT or your own agent 4. **Publish**: Social posts, newsletter, blog ## Tools for this use case - [YouTube Subtitles & Transcript Scraper API](https://cliqtomedia.com/actors/youtube-transcript-scraper/) (live): Get the public captions of a YouTube video as full text and timed parts. - [Audio & Podcast Transcriber (Speech to Text)](https://cliqtomedia.com/actors/audio-video-transcriber/) (live): Turn audio files or podcast episodes into text. - [YouTube Search Results Scraper — No Login](https://cliqtomedia.com/actors/youtube-search-scraper/) (live): Search YouTube by keyword and get each result as a row. - [News Article Extractor: RSS, URLs & Clean Text](https://cliqtomedia.com/actors/news-article-extractor/) (live): Paste news links or a news site. - [Website to Markdown for RAG: Crawl & Changed Pages](https://cliqtomedia.com/actors/website-to-markdown/) (live): Give a start URL and a page limit. - [PDF & Image to Text OCR for AI Agents - No Login](https://cliqtomedia.com/actors/pdf-text-ocr/) (live): Give a link to a PDF or an image. - [RSS & Atom Feed Reader / Monitor](https://cliqtomedia.com/actors/rss-atom-feed-reader-monitor/) (live): Paste one or more feed links and get each item as a row. - [Video URL to Text: Transcribe TikTok, Reels, X, YouTube](https://cliqtomedia.com/actors/video-to-text/) (coming soon): Paste a video link and get the spoken words as text. - [Fast Webpage to Markdown API for AI Agents](https://cliqtomedia.com/actors/webpage-to-markdown-api/) (coming soon): Give a link and get the page as clean Markdown in a few seconds. - [PDF to Markdown for LLMs & RAG Chunks - No Login](https://cliqtomedia.com/actors/pdf-to-markdown/) (coming soon): Paste a PDF link and get Markdown with real headings, lists and tables. ## Example workflow 1. **Pick the source**: Your own videos and podcasts, or articles and reports in your field. 2. **Get the text**: YouTube Transcript Scraper for videos, Website to Markdown for pages, PDF & Image to Text OCR for reports. After release: Webpage to Markdown API and PDF to Markdown. 3. **Write with AI**: Ask for 5 short posts, one thread and one newsletter from the text. 4. **Edit and post**: Check the facts, add your voice and schedule the posts, for example with [Bulk Post Scheduler for X](/extensions/x-bulk-scheduler/). 5. **Make it a loop**: Watch your RSS feed. Each new episode starts the flow again. Example result row: video = youtu.be/…, title = How we grew to 10k users, language = en, duration = 00:42:10, transcript = Hello and welcome… Send the data to: Claude, OpenAI, Notion, Google Drive, Make, n8n. ## Who uses it - **Content teams**: Make a month of posts from one long video. - **Creators and podcasters**: Turn every episode into text, clips and notes. - **AI builders**: Feed clean text to RAG and agents. ## Questions ### Can I get transcripts of any YouTube video? Of public videos with captions, yes. For audio or video files, use the Audio & Podcast Transcriber with a direct file link. After release: Video to Text for video page links. ### Which languages work? Transcripts come in the languages the video has. The transcriber tools support many languages. ### Can I use other people's content? Use it for research and summaries, and respect copyright. Do not republish other people's work as your own. ### Does it work with AI agents? Yes. Agents can run these tools over the Apify MCP server. See [AI agents](/actors/ai-agents/). ## More use cases - [Hear what people say about you](https://cliqtomedia.com/actors/use-cases/social-listening/) - [SEO data without a big suite](https://cliqtomedia.com/actors/use-cases/seo-research/) - [Find the right creators, fast](https://cliqtomedia.com/actors/use-cases/creator-outreach/) ## Browser extensions for this task - [Bulk Post Scheduler for X](https://cliqtomedia.com/extensions/x-bulk-scheduler/): Bulk schedule X posts from a CSV or Excel file. Posts go to X's own Scheduled list. --- # Find the right creators, fast > Find podcasts, YouTube channels, newsletters and creators in your niche with public contacts. Build outreach lists for guest spots, sponsorships and PR. URL: https://cliqtomedia.com/actors/use-cases/creator-outreach/ Find podcasts, YouTube channels, newsletters and creators that talk to your audience. Get their public contacts and key numbers in one list, ready for outreach. ## The task Guest spots on podcasts, sponsored videos and newsletter ads work well, but finding the right creators takes days. You search, click, look for a contact page, and copy. Our tools search podcast directories, YouTube and newsletter platforms for your topic. They return the show or channel with its public contact info, so you can start outreach the same day. | By hand | With our Actors | |---|---| | Search podcasts and channels one by one | Hundreds of shows and channels by topic | | Hunt for contact emails | Public emails from RSS feeds and pages | | No numbers to compare creators | Episodes, views and dates to compare | | Lists get old fast | Fresh lists in minutes | ## How it works 1. **Pick a topic**: Your niche words, like "bootstrapped SaaS" 2. **Find creators**: Podcasts, YouTube channels, newsletters 3. **Get contacts**: Public emails, links and key numbers 4. **Start outreach**: CRM, sheet or email tool ## Tools for this use case - [Apple Podcast Directory & RSS Contacts Scraper](https://cliqtomedia.com/actors/podcast-directory-rss-contacts-scraper/) (live): Find podcasts on Apple by keyword or ID, or read a public RSS feed. - [YouTube Search Results Scraper — No Login](https://cliqtomedia.com/actors/youtube-search-scraper/) (live): Search YouTube by keyword and get each result as a row. - [YouTube Comments Scraper](https://cliqtomedia.com/actors/youtube-comments-scraper/) (live): Export public comments and replies from YouTube videos. - [Substack Newsletter Scraper](https://cliqtomedia.com/actors/substack-newsletter-scraper/) (live): Get post data from public Substack feeds. - [Medium Article Scraper: Tags, Authors & Publications](https://cliqtomedia.com/actors/medium-articles-scraper/) (live): Get the newest Medium stories by tag, author or publication. - [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/) (live): Add a list of company websites. - [Bulk Email Verifier: MX, Disposable, Role & Typo Check](https://cliqtomedia.com/actors/email-verifier/) (live): Paste email addresses or pick a dataset from a lead scraper. - [SoundCloud Scraper - Tracks, Artists, Playlists & Plays](https://cliqtomedia.com/actors/soundcloud-scraper/) (coming soon): Get public SoundCloud track data by search, artist, playlist or link. ## Example workflow 1. **Write the topic**: Use 3–5 words your audience uses, like "indie hackers" or "home baking". 2. **Find the shows**: Podcast Directory & RSS Contacts finds podcasts and the public email in their feed. 3. **Add channels**: YouTube Search Scraper finds channels and videos on the same topic. 4. **Check contacts**: Run Email Verifier. It checks the format, the domain and its mail (MX) records. It does not confirm that the mailbox exists. 5. **Pitch and track**: Send the list to your CRM and track replies. Example result row: show = The Growth Show, type = podcast, episodes = 212, last_episode = 2026-10-10, email = host@…, website = growthshow.fm Send the data to: HubSpot, Google Sheets, Airtable, Notion, Make, Zapier. ## Who uses it - **PR and growth teams**: Book guest spots on the right podcasts. - **Brands**: Find creators for sponsorships in your niche. - **Agencies**: Build creator lists for each project. ## Questions ### Where do the emails come from? From public places only: podcast RSS feeds, channel pages and websites. Many podcasts list a contact email in their feed. ### Can I find creators in other languages? Yes. Search with words in that language, and set the country where the tool allows it. ### Is cold outreach to creators OK? Keep your offer short, personal and relevant to their audience, and follow the email laws of your country. ### Can you run the outreach for me? No. Our Actors find creators and their public contacts. You write and send the messages yourself, with your own email tool. ## More use cases - [Lead lists from public data](https://cliqtomedia.com/actors/use-cases/lead-generation/) - [Hear what people say about you](https://cliqtomedia.com/actors/use-cases/social-listening/) - [One piece of content, ten new posts](https://cliqtomedia.com/actors/use-cases/content-repurposing/) --- # Apify Actors: Web Scrapers & Data APIs > Apify Actors by Cliqto Media, 150+ built, 103 live: web scrapers and data APIs for jobs, shops, social media, SEO and reviews. Pay per result. URL: https://cliqtomedia.com/actors/ ## Use cases - [Lead lists](https://cliqtomedia.com/actors/use-cases/lead-generation/): Build lists of companies and contacts from public sites. Check emails and phones before you send. - [Buying signals](https://cliqtomedia.com/actors/use-cases/buying-signals/): Know when a company hires, raises money or wins a contract. Reach out at the right moment. - [Competitor watch](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/): See what your competitors launch, hire, change and advertise. Every week, without opening their sites. - [Price tracking](https://cliqtomedia.com/actors/use-cases/price-monitoring/): Track prices and offers in shops and marketplaces. See changes before your customers do. - [Review monitoring](https://cliqtomedia.com/actors/use-cases/review-monitoring/): Collect reviews from the App Store, Google Play and more. Find what people love and what they hate. - [SEO research](https://cliqtomedia.com/actors/use-cases/seo-research/): Collect keyword ideas and check your pages and your rivals' pages. Search results and trends coming soon. - [Social listening](https://cliqtomedia.com/actors/use-cases/social-listening/): Find what people say about your brand and your topic on Bluesky, Hacker News, YouTube and more. - [Content repurposing](https://cliqtomedia.com/actors/use-cases/content-repurposing/): Turn videos, podcasts, PDFs and articles into clean text. Make posts, notes and AI drafts from it. - [Creator outreach](https://cliqtomedia.com/actors/use-cases/creator-outreach/): Find podcasts, YouTube channels and newsletters in your niche, with public contact details. ## Jobs & hiring - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) (live): Pick a role and a location, or paste a Wellfound job link. - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) (live): Add a known Ashby board name, like ramp. - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) (live): Add a Lever company name or board link. - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) (live): Add the Greenhouse boards of companies you follow. - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) (live): Enter a Recruitee company name or link. - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) (live): Name the SmartRecruiters companies you follow. - [BambooHR Jobs Monitor & Scraper](https://cliqtomedia.com/actors/bamboohr-jobs-monitor-scraper/) (live): Add a BambooHR board name. You get its public jobs with text, pay and apply links. Give a past snapshot to see new, changed and removed… - [Breezy HR Jobs Monitor & Scraper](https://cliqtomedia.com/actors/breezy-jobs-monitor-scraper/) (live): Add up to 4 Breezy HR board URLs. - [JazzHR Jobs Monitor & Scraper](https://cliqtomedia.com/actors/jazzhr-jobs-monitor-scraper/) (live): Paste a JazzHR career page or job link. - [Pinpoint Jobs Monitor & Scraper](https://cliqtomedia.com/actors/pinpoint-jobs-monitor-scraper/) (live): Add one to five Pinpoint career boards. - [Rippling Jobs Monitor & Scraper](https://cliqtomedia.com/actors/rippling-jobs-monitor-scraper/) (live): Add Rippling board names or links. - [GoHire Jobs Monitor & Scraper](https://cliqtomedia.com/actors/gohire-jobs-monitor-scraper/) (live): Add up to 4 GoHire companies and get their public jobs with full descriptions. - [HireHive Jobs Monitor & Scraper](https://cliqtomedia.com/actors/hirehive-jobs-monitor-scraper/) (live): Add the HireHive boards of companies you know. - [Homerun Jobs Monitor & Scraper](https://cliqtomedia.com/actors/homerun-jobs-monitor-scraper/) (live): Add the Homerun career pages of companies you know. - [Personio Vacancy Watch](https://cliqtomedia.com/actors/personio-jobs-monitor-scraper/) (live): Add the Personio board of a company you know. - [TalentLyft Jobs Monitor & Scraper](https://cliqtomedia.com/actors/talentlyft-jobs-monitor-scraper/) (live): Add the TalentLyft subdomain of a company. - [Workable Jobs Monitor & Scraper](https://cliqtomedia.com/actors/workable-jobs-monitor-scraper/) (live): Add Workable companies, or search Workable jobs by keyword and place. - [Hireology Jobs Monitor & Scraper](https://cliqtomedia.com/actors/hireology-jobs-monitor-scraper/) (live): Paste a Hireology career page link. - [Manatal Jobs Monitor & Scraper](https://cliqtomedia.com/actors/manatal-jobs-monitor-scraper/) (live): Add a Manatal board name or link. - [Google Jobs Scraper - Salary, Apply Links & Dates, No Login](https://cliqtomedia.com/actors/google-jobs-scraper/) (live): Type a job title and a city. You get the jobs Google shows, one row per job. Each row has the company, salary text, posting age and the… - [Remote Jobs Aggregator - RemoteOK, WWR & Himalayas, No login](https://cliqtomedia.com/actors/remote-jobs-aggregator/) (live): Get remote jobs from three popular boards in one list. - [SEEK Jobs Scraper AU & NZ — Filters, No Login](https://cliqtomedia.com/actors/seek-jobs-scraper/) (live): Type a job search and a place in Australia or New Zealand. - [StepStone Jobs Scraper DE, AT, BE, NL — New Jobs, No Login](https://cliqtomedia.com/actors/stepstone-jobs-scraper/) (live): Search StepStone for a role and a city. ## E-commerce & prices - [AliExpress Scraper: Products, Prices & Reviews, No Login](https://cliqtomedia.com/actors/aliexpress-scraper/) (live): Type keywords to get AliExpress products, or paste product links to get reviews. - [Coles, Woolworths & Aldi Price Scraper - No Login](https://cliqtomedia.com/actors/au-supermarket-prices/) (live): Search Coles, Woolworths and Aldi Australia at once and get one price table. - [Idealo Price Scraper: All Shop Offers, 6 Countries, No Login](https://cliqtomedia.com/actors/idealo-price-scraper/) (live): Search idealo or paste product links. - [Naver Shopping Scraper: Korea Products & Prices](https://cliqtomedia.com/actors/naver-shopping-scraper/) (live): Search Naver Shopping, Korea's largest shopping search, by keyword. - [Trendyol Scraper: Products, Prices & Reviews (No login)](https://cliqtomedia.com/actors/trendyol-scraper/) (live): Add a keyword or product links from Trendyol, Turkey's largest online marketplace. - [eBay Sold Listings Scraper - Sold Prices & Dates](https://cliqtomedia.com/actors/ebay-sold-listings/) (live): Search eBay sold and completed listings by keyword. - [Etsy Listings & Shop Export (Etsy Open API v3)](https://cliqtomedia.com/actors/etsy-listings-api/) (coming soon): Search Etsy by keyword or export whole shops. - [Google Shopping Scraper - Prices, Stores & Offers, No Login](https://cliqtomedia.com/actors/google-shopping-scraper/) (coming soon): Add product searches and pick a country. - [JD.com Products Scraper](https://cliqtomedia.com/actors/jd-com-scraper/) (coming soon): Type Chinese keywords or paste JD.com links and get products as rows. - [Marketplace Seller Fee Calculator](https://cliqtomedia.com/actors/marketplace-fee-calculator/) (coming soon): Enter a sale price and item cost. - [Shopify Store Products Export - No Login, Any Store](https://cliqtomedia.com/actors/shopify-products-scraper/) (coming soon): Add a store URL and get its public products in one table. - [Taobao & 1688 Products Scraper](https://cliqtomedia.com/actors/taobao-1688-scraper/) (coming soon): Search 1688.com or Taobao by keyword. - [Wildberries Scraper: Products, Prices, Reviews, No Login](https://cliqtomedia.com/actors/wildberries-scraper/) (coming soon): Search Wildberries by keyword, or paste article numbers. - [WooCommerce Store Products Export - Prices, Stock, No Login](https://cliqtomedia.com/actors/woocommerce-products/) (coming soon): Add a store URL and get its public products in one table. - [eBay Search Scraper: Active Listings & Prices, No Login](https://cliqtomedia.com/actors/ebay-browse-search/) (coming soon): Search live eBay listings by keyword or category. ## Classifieds & second-hand - [AutoScout24 Scraper - EU Car Listings & Prices, No login](https://cliqtomedia.com/actors/car-listings-scraper/) (live): Pick a car make and model, and add filters. - [Depop Scraper - Listings, Prices, Brands & Shops](https://cliqtomedia.com/actors/depop-scraper/) (live): Search Depop by keyword, or add shop names. - [Kleinanzeigen Scraper: Listings, Prices & Photos (No Login)](https://cliqtomedia.com/actors/kleinanzeigen-scraper/) (live): Search Kleinanzeigen.de by keyword, city and radius. - [OLX Listings Scraper: Poland, Ukraine, Romania & More](https://cliqtomedia.com/actors/olx-listings-scraper/) (live): Search OLX by keyword or paste an OLX results link. - [Subito.it Scraper - Italy Classifieds & Prices, No Login](https://cliqtomedia.com/actors/subito-listings-scraper/) (live): Get ads from Subito.it, a big Italian classifieds site, as a clean table. - [Craigslist Scraper - Listings, Prices & Photos, No Login](https://cliqtomedia.com/actors/craigslist-scraper/) (coming soon): Pick Craigslist cities, a category and a keyword. - [Vinted Scraper - Listings, Prices & Brands in 25 Countries](https://cliqtomedia.com/actors/vinted-scraper/) (coming soon): Search Vinted like on the website and get a clean list of items. - [Wallapop & Poshmark Scraper - Secondhand Listings, No Login](https://cliqtomedia.com/actors/secondhand-listings-scraper/) (coming soon): Search Wallapop in Spain, Italy or Portugal, or Poshmark in the US or Canada. - [mobile.de Car Listings Scraper - Prices & Specs, No login](https://cliqtomedia.com/actors/mobile-de-scraper/) (coming soon): Turn a mobile.de car search into a clean table. ## Real estate, travel & cars - [99acres & MagicBricks India Property Scraper - No Login](https://cliqtomedia.com/actors/india-property-listings/) (live): Get rent and sale homes from MagicBricks and 99acres in one table. - [Events Scraper: Eventbrite, Meetup & Luma — No Login](https://cliqtomedia.com/actors/events-aggregator/) (live): Get public events from three sites in one list. - [Google Flights Scraper - Prices & Times, No Login](https://cliqtomedia.com/actors/google-flights-scraper/) (live): Get Google Flights results for a route and dates as a table. - [Redfin & Realtor Listings Scraper (US): Sale, Sold & Rent](https://cliqtomedia.com/actors/us-property-listings/) (coming soon): Get US home listings from Redfin or Realtor.com for cities, ZIP codes or counties. ## Social media & communities - [Substack Newsletter Scraper](https://cliqtomedia.com/actors/substack-newsletter-scraper/) (live): Get post data from public Substack feeds. - [Hacker News Stories & Comments Scraper](https://cliqtomedia.com/actors/hacker-news-stories-comments-scraper/) (live): Export Hacker News stories and comments as rows. - [Bilibili Scraper: Videos, Comments & Creators, No Login](https://cliqtomedia.com/actors/bilibili-scraper/) (live): Get public Bilibili data in clean rows. - [Bluesky Scraper — Posts, Profiles, Feeds & Threads, No Login](https://cliqtomedia.com/actors/bluesky-scraper/) (live): Get public Bluesky posts, profiles, threads and feeds as clean rows. - [Medium Article Scraper: Tags, Authors & Publications](https://cliqtomedia.com/actors/medium-articles-scraper/) (live): Get the newest Medium stories by tag, author or publication. - [Pinterest Search Scraper: Pins & Boards, No Login](https://cliqtomedia.com/actors/pinterest-search-scraper/) (live): Get pins and boards from Pinterest search, boards and profiles. - [Product Hunt Launches Scraper – Daily Top, No Login](https://cliqtomedia.com/actors/product-hunt-launches/) (live): Get Product Hunt daily leaderboards for any day or period up to 31 days. - [Reddit Scraper: Posts, Comments & Subreddits (No login)](https://cliqtomedia.com/actors/reddit-scraper/) (live): Get public Reddit posts and comments as clean rows. - [Telegram Channel Scraper - Posts & Views, No Login](https://cliqtomedia.com/actors/telegram-channel-scraper/) (live): Get posts from public Telegram channels as clean rows. - [Threads Scraper — Posts, Profiles, Replies & Search](https://cliqtomedia.com/actors/threads-scraper/) (live): Get public Threads posts without login. - [Truth Social Scraper - Posts & Profiles, No Login](https://cliqtomedia.com/actors/truth-social-scraper/) (live): Get public Truth Social posts and profiles by username. - [Weibo Scraper: Posts, Comments & Profiles, No Login](https://cliqtomedia.com/actors/weibo-scraper/) (live): Get public Weibo data without login. - [Quora Answers Scraper: Upvotes, Views & Authors, No Login](https://cliqtomedia.com/actors/quora-scraper/) (coming soon): Get public Quora answers for a question or a topic. - [Stack Overflow & Stack Exchange Q&A Scraper, No Login](https://cliqtomedia.com/actors/stack-exchange-scraper/) (coming soon): Pick a site and a tag, a search or a list of question links. ## Video, audio & streaming - [YouTube Subtitles & Transcript Scraper API](https://cliqtomedia.com/actors/youtube-transcript-scraper/) (live): Get the public captions of a YouTube video as full text and timed parts. - [YouTube Comments Scraper](https://cliqtomedia.com/actors/youtube-comments-scraper/) (live): Export public comments and replies from YouTube videos. - [Apple Podcast Directory & RSS Contacts Scraper](https://cliqtomedia.com/actors/podcast-directory-rss-contacts-scraper/) (live): Find podcasts on Apple by keyword or ID, or read a public RSS feed. - [Audio & Podcast Transcriber (Speech to Text)](https://cliqtomedia.com/actors/audio-video-transcriber/) (live): Turn audio files or podcast episodes into text. - [Social Video Downloader: TikTok, Instagram, X - No Login](https://cliqtomedia.com/actors/social-video-downloader/) (live): Save public videos from TikTok, Instagram, X, Facebook and more as files. - [YouTube Search Results Scraper — No Login](https://cliqtomedia.com/actors/youtube-search-scraper/) (live): Search YouTube by keyword and get each result as a row. - [Kick Live Streams & Viewer Count (Official API), No Login](https://cliqtomedia.com/actors/kick-channels/) (coming soon): Paste Kick channel names or links. - [SoundCloud Scraper - Tracks, Artists, Playlists & Plays](https://cliqtomedia.com/actors/soundcloud-scraper/) (coming soon): Get public SoundCloud track data by search, artist, playlist or link. - [Twitch Clips & VODs Scraper - Export by Channel and Date](https://cliqtomedia.com/actors/twitch-clips-vods/) (coming soon): Add Twitch channels and pick clips or VODs. - [Twitch Follower Count & Channel Stats (Helix API), No Login](https://cliqtomedia.com/actors/twitch-channels/) (coming soon): Paste Twitch logins or links. Get followers, bio, partner or affiliate status, last game, language and tags. You can also search channels.… - [Twitch Live Streams Scraper - Viewers by Game & Language](https://cliqtomedia.com/actors/twitch-streams/) (coming soon): Find who is live on Twitch right now. - [Video URL to Text: Transcribe TikTok, Reels, X, YouTube](https://cliqtomedia.com/actors/video-to-text/) (coming soon): Paste a video link and get the spoken words as text. - [YouTube Channel Videos Export - Views, Likes & Shorts](https://cliqtomedia.com/actors/youtube-channel-videos/) (coming soon): Paste channel links, @handles or IDs. - [YouTube Playlist Export (Data API), No Login](https://cliqtomedia.com/actors/youtube-playlist-export/) (coming soon): Paste playlist links or IDs. Get one row per playlist position in the same order as on YouTube. Each row has title, channel, date… - [YouTube Video Stats & Metadata (Data API), No Login](https://cliqtomedia.com/actors/youtube-video-details/) (coming soon): Paste video links or IDs. Get views, likes, comments, duration, tags, category and language. One row per video, with numbers as numbers.… ## Search, SEO & ads - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) (live): Get the phrases Google suggests when people start typing. - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) (live): Read JSON-LD structured data from a list of web pages. - [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/) (live): Turn a sitemap into a clean list of page URLs. - [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/) (live): Get the title, description, canonical and social tags of up to 100 pages. - [Google Ads Transparency Scraper - Ad Text, No Login](https://cliqtomedia.com/actors/google-ads-transparency-scraper/) (live): See which ads a brand runs on Google. - [Google Images Scraper - Image URLs, Sizes & Source Pages](https://cliqtomedia.com/actors/google-images-scraper/) (live): Type a search phrase and get Google Images results as a table. - [Google News Scraper - Real Article URLs, No Login](https://cliqtomedia.com/actors/google-news-scraper/) (live): Search Google News by keyword, topic or Top stories. - [Google Search Results Scraper (SERP) - No Login, Per Page](https://cliqtomedia.com/actors/google-search-scraper/) (live): Add keywords and get Google results as rows. - [Google Trends Scraper - Interest & Related, No Login](https://cliqtomedia.com/actors/google-trends-scraper/) (live): Get Google Trends data for many keywords in one run. - [AI Search Visibility Tracker (ChatGPT, Perplexity, Gemini)](https://cliqtomedia.com/actors/ai-search-visibility/) (coming soon): Ask ChatGPT, Perplexity and Gemini the questions your buyers ask. - [DuckDuckGo & Bing Search Scraper - No Login, Real URLs](https://cliqtomedia.com/actors/duckduckgo-bing-search/) (coming soon): Add keywords and get DuckDuckGo and Bing results as rows. - [SEO Site Audit: Broken Links, Meta Tags & Speed](https://cliqtomedia.com/actors/seo-site-audit/) (coming soon): Crawl one website from a start URL. - [Wayback Machine Snapshots & Archived Text (No Login)](https://cliqtomedia.com/actors/wayback-machine-snapshots/) (coming soon): Add a URL, a URL prefix or a domain. ## Reviews & app stores - [Apple App Store Reviews Scraper](https://cliqtomedia.com/actors/apple-app-store-reviews-scraper/) (live): Export public App Store reviews for your apps and countries. - [Google Play Reviews Scraper](https://cliqtomedia.com/actors/google-play-reviews-scraper/) (live): Export written Google Play reviews for your apps. - [TrustRadius Reviews Scraper](https://cliqtomedia.com/actors/trustradius-reviews-scraper/) (live): Get public TrustRadius software reviews as clean rows. - [App Store Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/app-store-apps-search/) (live): Search the Apple App Store for many keywords in many countries at once. - [Google Play Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/google-play-apps-search/) (live): Search Google Play for many keywords in many countries in one run. - [OpenTable Reviews & Restaurants Scraper, No Login](https://cliqtomedia.com/actors/opentable-reviews-scraper/) (live): Get OpenTable guest reviews with detailed ratings and owner replies. - [Trustpilot Reviews Scraper - Ratings & Replies, No Login](https://cliqtomedia.com/actors/trustpilot-reviews-scraper/) (live): Add a company domain and get its public Trustpilot reviews in a table. - [Steam Reviews & Game Details Scraper — No login](https://cliqtomedia.com/actors/steam-reviews/) (coming soon): Add a Steam app ID or store link. ## AI-ready content & documents - [RSS & Atom Feed Reader / Monitor](https://cliqtomedia.com/actors/rss-atom-feed-reader-monitor/) (live): Paste one or more feed links and get each item as a row. - [WordPress Posts & Pages Scraper](https://cliqtomedia.com/actors/wordpress-posts-pages-scraper/) (live): Add a WordPress site URL and export its public posts and pages. - [News Article Extractor: RSS, URLs & Clean Text](https://cliqtomedia.com/actors/news-article-extractor/) (live): Paste news links or a news site. - [PDF & Image to Text OCR for AI Agents - No Login](https://cliqtomedia.com/actors/pdf-text-ocr/) (live): Give a link to a PDF or an image. - [RAG Web Search: Google Results as Clean Markdown](https://cliqtomedia.com/actors/rag-web-search/) (live): Type a question or topic and get the top Google pages as clean text. - [Website Screenshot & PDF Generator: Full Page & Mobile](https://cliqtomedia.com/actors/website-screenshot-pdf/) (live): Make full-page pictures or PDFs of a list of web pages. - [Website to Markdown for RAG: Crawl & Changed Pages](https://cliqtomedia.com/actors/website-to-markdown/) (live): Give a start URL and a page limit. - [Fast Webpage to Markdown API for AI Agents](https://cliqtomedia.com/actors/webpage-to-markdown-api/) (coming soon): Give a link and get the page as clean Markdown in a few seconds. - [LLM Web Data Extractor for OpenAI, Anthropic, Gemini Keys](https://cliqtomedia.com/actors/llm-web-extractor/) (coming soon): Give page links and the fields you want. - [PDF to Markdown for LLMs & RAG Chunks - No Login](https://cliqtomedia.com/actors/pdf-to-markdown/) (coming soon): Paste a PDF link and get Markdown with real headings, lists and tables. - [Screenshot API: URL to PNG, JPEG or PDF, Fast, No Login](https://cliqtomedia.com/actors/screenshot-api/) (coming soon): Send up to 200 links and get a picture or PDF of each page. - [Text Translator: 50 Languages, No API Key](https://cliqtomedia.com/actors/text-translator/) (coming soon): Send a list of texts and get translations in 50 languages. ## Leads, companies & validation - [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/) (live): Add a list of company websites. - [Bulk Email Verifier: MX, Disposable, Role & Typo Check](https://cliqtomedia.com/actors/email-verifier/) (live): Paste email addresses or pick a dataset from a lead scraper. - [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/) (live): Paste a list of domains. For each one, you get registrar, dates and days until expiry from the official registry. You also get live DNS… - [EU VAT Number Validator (VIES) - Bulk Check, No Login](https://cliqtomedia.com/actors/vat-number-validator/) (live): Paste a list of EU VAT numbers. - [Europages Scraper: B2B Suppliers & Certificates (No Login)](https://cliqtomedia.com/actors/europages-companies-scraper/) (live): Search Europages by product and country. - [France Company & SIRET Search](https://cliqtomedia.com/actors/france-sirene-company-search/) (live): Check French companies by SIREN, SIRET or VAT number. - [Norway Company Register (Brreg) & Updates](https://cliqtomedia.com/actors/norway-brreg-company-register/) (live): Look up Norwegian companies by organisation number, or search the register with filters. - [Phone Number Validator & Formatter - Bulk E.164, No Login](https://cliqtomedia.com/actors/phone-number-validator/) (live): Paste phone numbers in any format. - [Website Tech Stack Detector: CMS, Versions & CDN, No Login](https://cliqtomedia.com/actors/tech-stack-detector/) (live): Paste a list of websites. The tool checks each live page against 7,600+ technology fingerprints. You get one row per site with CMS, shop… - [YC Companies Scraper: Founders & Jobs, No Login](https://cliqtomedia.com/actors/y-combinator-companies/) (live): Pick a YC batch, industry or region. - [Bulk Email List Validator: Clean CSV, No Login](https://cliqtomedia.com/actors/bulk-email-validator/) (coming soon): Upload your email list as a CSV or Google Sheet link. - [Finland Company Register (PRH YTJ)](https://cliqtomedia.com/actors/finland-ytj-company-register/) (coming soon): Check Finnish companies by Business ID (Y-tunnus), or search by name and town. - [LEI Lookup & Change Monitor (GLEIF)](https://cliqtomedia.com/actors/lei-gleif-lookup/) (coming soon): Paste LEI codes or a company name. - [OpenStreetMap POI Extractor: Cafes, Shops, Hotels by City](https://cliqtomedia.com/actors/openstreetmap-poi-extractor/) (coming soon): Get places from OpenStreetMap for a city or a map box. ## Developer & website monitoring - [Link Route Audit — Bulk HTTP Status & Redirects](https://cliqtomedia.com/actors/bulk-url-status-redirect-checker/) (live): Paste a list of URLs and see where each one ends up. - [GitHub Releases Monitor & Scraper](https://cliqtomedia.com/actors/github-releases-monitor-scraper/) (live): Add up to 10 public repositories and get their releases as rows. - [Software End-of-Life Checker](https://cliqtomedia.com/actors/software-end-of-life-checker/) (live): Add rows like nodejs 18.20.4 or ubuntu 20.04, or a CSV. - [Dependency Vulnerability Scanner (OSV)](https://cliqtomedia.com/actors/osv-dependency-vulnerability-scanner/) (coming soon): Paste a package list, package.json, package-lock.json or requirements.txt. - [GitHub Repositories & Users Search (No Login)](https://cliqtomedia.com/actors/github-search/) (coming soon): Search GitHub with its own search syntax. - [OpenAPI Catalog & Breaking Change Detector](https://cliqtomedia.com/actors/openapi-spec-catalog-diff/) (coming soon): Compare an old and a new OpenAPI spec and see possible breaking changes. - [SSL Certificate Checker: Expiry, Chain & CT, No Login](https://cliqtomedia.com/actors/ssl-certificate-inspector/) (coming soon): Check the SSL certificate of many sites in one run. - [Statuspage Incidents Monitor — Vendor Status & Changes](https://cliqtomedia.com/actors/statuspage-incidents-monitor/) (coming soon): Check the status pages of vendors you use, like GitHub or Cloudflare. - [npm Package Metadata & Release Monitor](https://cliqtomedia.com/actors/npm-package-metadata-monitor/) (coming soon): List up to 100 npm packages and get one row for each. ## Science & research data - [Google Patent Details Scraper](https://cliqtomedia.com/actors/google-patents-scraper/) (live): Add patent numbers or Google Patents links you already have. - [DOI Metadata & Bibliography Enrichment](https://cliqtomedia.com/actors/doi-bibliography-enrichment/) (live): Paste a list of DOIs and get one clean citation record each. - [ClinicalTrials.gov Studies Search & Monitor](https://cliqtomedia.com/actors/clinicaltrials-gov-studies-monitor/) (coming soon): Search ClinicalTrials.gov with simple filters and export study records. - [DataCite Research Dataset Search](https://cliqtomedia.com/actors/datacite-dataset-search/) (coming soon): Search DataCite for research datasets with simple filters. - [Europe PMC Literature Search & Monitor](https://cliqtomedia.com/actors/europe-pmc-literature-search/) (coming soon): Search Europe PMC for articles and preprints. - [GBIF Biodiversity Occurrence Search](https://cliqtomedia.com/actors/gbif-occurrence-search/) (coming soon): Search species records from GBIF with a few filters. - [Google Scholar Search Scraper - Citations & PDFs, No Login](https://cliqtomedia.com/actors/google-scholar-scraper/) (coming soon): Search Google Scholar and get one row per article. - [The Met & Art Institute of Chicago Artwork Search](https://cliqtomedia.com/actors/museum-open-access-search/) (coming soon): Search two big museum collections with one input. - [Wikipedia Pageviews & Trends Monitor](https://cliqtomedia.com/actors/wikipedia-pageviews-monitor/) (coming soon): See how many people read a Wikipedia article each day or month. - [arXiv Papers Search & Version Monitor](https://cliqtomedia.com/actors/arxiv-papers-monitor/) (coming soon): Search arXiv papers by words, category and dates. ## Government & open data - [EU TED Tenders Scraper & Monitor](https://cliqtomedia.com/actors/eu-ted-tenders-scraper/) (live): Find EU public tenders on TED with your own filters. - [UK Bank Holidays & Business Day Calculator](https://cliqtomedia.com/actors/uk-bank-holidays-business-days/) (live): Get UK bank holidays from GOV.UK for each part of the UK. - [UK Postcode Lookup](https://cliqtomedia.com/actors/gb-postcode-lookup/) (live): Paste a list of Great Britain postcodes and get map points and official area codes. - [USAspending Federal Awards & Recipient Monitor](https://cliqtomedia.com/actors/usaspending-federal-awards-monitor/) (live): Find US federal contracts, grants and loans from USAspending.gov. - [VIN Decoder & Vehicle Recalls](https://cliqtomedia.com/actors/vin-decoder-vehicle-recalls/) (live): Turn a list of VINs into clean vehicle rows with NHTSA data. - [FDA Recalls & Enforcement Monitor](https://cliqtomedia.com/actors/fda-recalls-enforcement-monitor/) (coming soon): Get FDA recalls for food, drugs and medical devices in one table. - [NASA POWER Historical Weather & Solar Data](https://cliqtomedia.com/actors/nasa-power-climate-data/) (coming soon): Get past weather and solar data for any latitude and longitude. - [NPI Registry Provider Lookup — US Practices & Taxonomies](https://cliqtomedia.com/actors/npi-registry-provider-lookup/) (coming soon): Search the public NPPES NPI Registry by specialty and place. - [Solar PV Yield Estimator (PVGIS)](https://cliqtomedia.com/actors/solar-pv-yield-estimator/) (coming soon): Estimate how much power a solar system makes at each site in your list. - [UK Carbon Intensity & Low-Carbon Windows](https://cliqtomedia.com/actors/uk-carbon-intensity/) (coming soon): See how clean the electricity grid is, half hour by half hour. - [US Health Data: CDC & HealthData.gov API, No login](https://cliqtomedia.com/actors/us-health-data-api/) (coming soon): Search the open data of the CDC and HealthData.gov by keyword or dataset ID. - [USGS Earthquake Events Export & Monitor](https://cliqtomedia.com/actors/usgs-earthquake-events/) (coming soon): Export earthquakes from the official USGS catalog with your own filters. - [USGS Water Data Export — Rivers & Streams](https://cliqtomedia.com/actors/usgs-water-data-export/) (coming soon): Export river flow and water level readings from USGS. - [Weather Forecast & Alerts Export (NWS + MET Norway)](https://cliqtomedia.com/actors/weather-forecast-alerts-export/) (coming soon): Get hourly or daily forecasts for up to 10 places in one table. - [World Bank Indicators Export — GDP & Population](https://cliqtomedia.com/actors/world-bank-indicators-export/) (coming soon): Export yearly World Bank data for the countries and indicators you pick. ## Finance, markets & sports - [SEC Form D Filing Monitor](https://cliqtomedia.com/actors/sec-edgar-form-d-funding-monitor/) (live): Find public Form D and D/A filings in SEC EDGAR by date or CIK. - [Crypto Prices & OHLC History Export - No Login](https://cliqtomedia.com/actors/crypto-market-data/) (live): Choose coins and get their price, market cap and 24h volume. - [Historical Exchange Rates & Currency Converter](https://cliqtomedia.com/actors/historical-fx-rates-converter/) (live): Get official ECB exchange rates for any pair and date since 1999. - [Polymarket & Kalshi Prediction Market Data, No Login](https://cliqtomedia.com/actors/prediction-markets-data/) (live): Search or look up markets on Polymarket and Kalshi. - [Tennis Scraper: ATP & WTA Matches, Players & Rankings](https://cliqtomedia.com/actors/tennis-stats-scraper/) (live): Get ATP and WTA match results, upcoming matches, player profiles and rankings. ## Questions ### How do I pick the right tool? Start with the website you need data from. Search for its name or open a category. Read the sample output to check the fields. ### Can I try a tool for free? Yes. Apify has a free plan with $5 of usage every month. That is enough for a small test run. ### What formats can I export? You can export JSON, CSV, Excel and more from Apify. You can also read the data with the API. ### What if the site I need is not listed? [Suggest a tool](/partners/#suggest). Tell us the site and the data you need. We read every idea, but we do not promise to build it. ### Do the tools need my login on the source site? Most do not. A few, like eBay sold listings, need your own session or an API key. Each tool page says what it needs. --- # Job scrapers and ATS jobs APIs > Collect job posts from Greenhouse, Lever, Ashby, Workable, SEEK, StepStone and more. Track new and closed jobs. Export to CSV or JSON. URL: https://cliqtomedia.com/actors/jobs/ Many companies post jobs on an ATS. ATS means applicant tracking system. Greenhouse, Lever, Ashby and Workable are popular examples. Each one has its own job page. Our job tools read these pages for you. You give a list of companies. The tool returns every open job in one clean table. You get the title, location, team, remote flag, date and apply link. We also have tools for big job sites. You can search SEEK, StepStone, Wellfound and remote job boards. Google Jobs is coming soon. You can filter by keyword, place or date. Many tools can also watch for changes. Run them on a schedule, for example every day. They show which jobs are new and which jobs closed. This is useful for job boards, recruiters and market research. All tools run on Apify. You can export to CSV, JSON or Excel. You pay for use on Apify. ## Tools - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) (live): Pick a role and a location, or paste a Wellfound job link. - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) (live): Add a known Ashby board name, like ramp. - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) (live): Add a Lever company name or board link. - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) (live): Add the Greenhouse boards of companies you follow. - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) (live): Enter a Recruitee company name or link. - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) (live): Name the SmartRecruiters companies you follow. - [BambooHR Jobs Monitor & Scraper](https://cliqtomedia.com/actors/bamboohr-jobs-monitor-scraper/) (live): Add a BambooHR board name. You get its public jobs with text, pay and apply links. Give a past snapshot to see new, changed and removed… - [Breezy HR Jobs Monitor & Scraper](https://cliqtomedia.com/actors/breezy-jobs-monitor-scraper/) (live): Add up to 4 Breezy HR board URLs. - [JazzHR Jobs Monitor & Scraper](https://cliqtomedia.com/actors/jazzhr-jobs-monitor-scraper/) (live): Paste a JazzHR career page or job link. - [Pinpoint Jobs Monitor & Scraper](https://cliqtomedia.com/actors/pinpoint-jobs-monitor-scraper/) (live): Add one to five Pinpoint career boards. - [Rippling Jobs Monitor & Scraper](https://cliqtomedia.com/actors/rippling-jobs-monitor-scraper/) (live): Add Rippling board names or links. - [GoHire Jobs Monitor & Scraper](https://cliqtomedia.com/actors/gohire-jobs-monitor-scraper/) (live): Add up to 4 GoHire companies and get their public jobs with full descriptions. - [HireHive Jobs Monitor & Scraper](https://cliqtomedia.com/actors/hirehive-jobs-monitor-scraper/) (live): Add the HireHive boards of companies you know. - [Homerun Jobs Monitor & Scraper](https://cliqtomedia.com/actors/homerun-jobs-monitor-scraper/) (live): Add the Homerun career pages of companies you know. - [Personio Vacancy Watch](https://cliqtomedia.com/actors/personio-jobs-monitor-scraper/) (live): Add the Personio board of a company you know. - [TalentLyft Jobs Monitor & Scraper](https://cliqtomedia.com/actors/talentlyft-jobs-monitor-scraper/) (live): Add the TalentLyft subdomain of a company. - [Workable Jobs Monitor & Scraper](https://cliqtomedia.com/actors/workable-jobs-monitor-scraper/) (live): Add Workable companies, or search Workable jobs by keyword and place. - [Hireology Jobs Monitor & Scraper](https://cliqtomedia.com/actors/hireology-jobs-monitor-scraper/) (live): Paste a Hireology career page link. - [Manatal Jobs Monitor & Scraper](https://cliqtomedia.com/actors/manatal-jobs-monitor-scraper/) (live): Add a Manatal board name or link. - [Google Jobs Scraper - Salary, Apply Links & Dates, No Login](https://cliqtomedia.com/actors/google-jobs-scraper/) (live): Type a job title and a city. You get the jobs Google shows, one row per job. Each row has the company, salary text, posting age and the… - [Remote Jobs Aggregator - RemoteOK, WWR & Himalayas, No login](https://cliqtomedia.com/actors/remote-jobs-aggregator/) (live): Get remote jobs from three popular boards in one list. - [SEEK Jobs Scraper AU & NZ — Filters, No Login](https://cliqtomedia.com/actors/seek-jobs-scraper/) (live): Type a job search and a place in Australia or New Zealand. - [StepStone Jobs Scraper DE, AT, BE, NL — New Jobs, No Login](https://cliqtomedia.com/actors/stepstone-jobs-scraper/) (live): Search StepStone for a role and a city. ## Use cases - Fill a niche job board with fresh jobs every day. - Watch hiring at target companies to find sales leads. - Track which teams a competitor is growing. - Build a salary and skills dataset for research. - Send new jobs to Slack or email with a webhook. ## Questions ### What is an ATS job scraper? It reads the public job page of an ATS like Greenhouse or Lever. It returns all open jobs of a company as data. ### How do I find a company's ATS? Open the company's careers page and check the job links. The address often shows the ATS name, like greenhouse.io or lever.co. ### Can I get only new jobs? Yes. Many of our job tools compare runs. They mark jobs as new, changed or closed. ### Can I scrape many companies at once? Yes. Most tools take a list of companies in one run. ### Do I need an API key from the ATS? No. The tools read public job pages. You only need an Apify account. --- # E-commerce price and product scrapers > Get product names, prices and offers from eBay sold listings, Idealo, Trendyol, Naver Shopping and more. AliExpress and Google Shopping are coming soon. URL: https://cliqtomedia.com/actors/ecommerce/ Prices online change every day. Checking them by hand takes a lot of time. Our e-commerce tools do this work for you. You give a search word, a category or product links. The tool returns product data in a clean table. You get the name, price, old price, seller, rating, reviews and link. Live today: eBay sold listings, Idealo, Trendyol, Naver Shopping and Australian supermarkets. Coming soon: AliExpress, Google Shopping, Wildberries, JD.com, Shopify and WooCommerce stores. Run a tool once for research. Or run it on a schedule to track prices over time. A fee calculator for marketplace sellers is coming soon too. All tools run on Apify. Export to CSV, JSON or Excel, or send data to Google Sheets. You pay for use on Apify. ## Tools - [AliExpress Scraper: Products, Prices & Reviews, No Login](https://cliqtomedia.com/actors/aliexpress-scraper/) (live): Type keywords to get AliExpress products, or paste product links to get reviews. - [Coles, Woolworths & Aldi Price Scraper - No Login](https://cliqtomedia.com/actors/au-supermarket-prices/) (live): Search Coles, Woolworths and Aldi Australia at once and get one price table. - [Idealo Price Scraper: All Shop Offers, 6 Countries, No Login](https://cliqtomedia.com/actors/idealo-price-scraper/) (live): Search idealo or paste product links. - [Naver Shopping Scraper: Korea Products & Prices](https://cliqtomedia.com/actors/naver-shopping-scraper/) (live): Search Naver Shopping, Korea's largest shopping search, by keyword. - [Trendyol Scraper: Products, Prices & Reviews (No login)](https://cliqtomedia.com/actors/trendyol-scraper/) (live): Add a keyword or product links from Trendyol, Turkey's largest online marketplace. - [eBay Sold Listings Scraper - Sold Prices & Dates](https://cliqtomedia.com/actors/ebay-sold-listings/) (live): Search eBay sold and completed listings by keyword. - [Etsy Listings & Shop Export (Etsy Open API v3)](https://cliqtomedia.com/actors/etsy-listings-api/) (coming soon): Search Etsy by keyword or export whole shops. - [Google Shopping Scraper - Prices, Stores & Offers, No Login](https://cliqtomedia.com/actors/google-shopping-scraper/) (coming soon): Add product searches and pick a country. - [JD.com Products Scraper](https://cliqtomedia.com/actors/jd-com-scraper/) (coming soon): Type Chinese keywords or paste JD.com links and get products as rows. - [Marketplace Seller Fee Calculator](https://cliqtomedia.com/actors/marketplace-fee-calculator/) (coming soon): Enter a sale price and item cost. - [Shopify Store Products Export - No Login, Any Store](https://cliqtomedia.com/actors/shopify-products-scraper/) (coming soon): Add a store URL and get its public products in one table. - [Taobao & 1688 Products Scraper](https://cliqtomedia.com/actors/taobao-1688-scraper/) (coming soon): Search 1688.com or Taobao by keyword. - [Wildberries Scraper: Products, Prices, Reviews, No Login](https://cliqtomedia.com/actors/wildberries-scraper/) (coming soon): Search Wildberries by keyword, or paste article numbers. - [WooCommerce Store Products Export - Prices, Stock, No Login](https://cliqtomedia.com/actors/woocommerce-products/) (coming soon): Add a store URL and get its public products in one table. - [eBay Search Scraper: Active Listings & Prices, No Login](https://cliqtomedia.com/actors/ebay-browse-search/) (coming soon): Search live eBay listings by keyword or category. ## Use cases - Track competitor prices every day. - Find what similar items really sold for on eBay. - Research a new product before you sell it. - Compare offers from many shops for one product. - Build a price history dataset for analysis. ## Questions ### Can I track prices every day? Yes. Save your input as a task and add a schedule in Apify. Each run saves the new prices. ### Can I get product reviews too? Some tools return ratings and reviews. Check the output fields on each tool page. ### Can I send the data to Google Sheets? Yes. Export a CSV, or send new rows to Google Sheets with Make, Zapier or n8n. ### Is it OK to collect prices from shops? Prices on public pages are usually public data. Follow each site's terms and your local law. Ask a lawyer about your own case. --- # Classifieds and second-hand marketplace scrapers > Collect listings and prices from Kleinanzeigen, OLX, Subito, Depop and AutoScout24 cars. Vinted, Craigslist and mobile.de are coming soon. No login. URL: https://cliqtomedia.com/actors/marketplaces/ Classifieds sites have millions of used items, cars and local deals. Good deals go fast. Our tools help you see them early. You give a search word, a filter link or a category. The tool returns listings in a clean table. You get the title, price, photos, place, date and link. Some tools also return brand, size or condition. Live today: Kleinanzeigen (Germany), OLX (Poland, Ukraine, Romania and more), Subito (Italy), Depop, and AutoScout24 for cars in Europe. Coming soon: Vinted, Craigslist, Wallapop, Poshmark, and mobile.de for cars. Many tools need no login. Run them on a schedule to catch new listings. You can then send them to email, Slack or a sheet. All tools run on Apify. Export to CSV, JSON or Excel. You pay for use on Apify. ## Tools - [AutoScout24 Scraper - EU Car Listings & Prices, No login](https://cliqtomedia.com/actors/car-listings-scraper/) (live): Pick a car make and model, and add filters. - [Depop Scraper - Listings, Prices, Brands & Shops](https://cliqtomedia.com/actors/depop-scraper/) (live): Search Depop by keyword, or add shop names. - [Kleinanzeigen Scraper: Listings, Prices & Photos (No Login)](https://cliqtomedia.com/actors/kleinanzeigen-scraper/) (live): Search Kleinanzeigen.de by keyword, city and radius. - [OLX Listings Scraper: Poland, Ukraine, Romania & More](https://cliqtomedia.com/actors/olx-listings-scraper/) (live): Search OLX by keyword or paste an OLX results link. - [Subito.it Scraper - Italy Classifieds & Prices, No Login](https://cliqtomedia.com/actors/subito-listings-scraper/) (live): Get ads from Subito.it, a big Italian classifieds site, as a clean table. - [Craigslist Scraper - Listings, Prices & Photos, No Login](https://cliqtomedia.com/actors/craigslist-scraper/) (coming soon): Pick Craigslist cities, a category and a keyword. - [Vinted Scraper - Listings, Prices & Brands in 25 Countries](https://cliqtomedia.com/actors/vinted-scraper/) (coming soon): Search Vinted like on the website and get a clean list of items. - [Wallapop & Poshmark Scraper - Secondhand Listings, No Login](https://cliqtomedia.com/actors/secondhand-listings-scraper/) (coming soon): Search Wallapop in Spain, Italy or Portugal, or Poshmark in the US or Canada. - [mobile.de Car Listings Scraper - Prices & Specs, No login](https://cliqtomedia.com/actors/mobile-de-scraper/) (coming soon): Turn a mobile.de car search into a clean table. ## Use cases - Get alerts for new listings that match your search. - Check fair prices for used items before you buy or sell. - Find stock for a resale business. - Compare used car prices across countries. - Study second-hand market trends over time. ## Questions ### Can I get alerts for new listings? Yes. Run the tool on a schedule. Then send new items to email or Slack with Make, Zapier or a webhook. ### Do I need an account on the marketplace? No. Our tools read public listing pages only. ### Can I use a search link from the site? Many tools accept a search link with your filters. Check the input on each tool page. ### Can I collect seller contact details? Our tools focus on public listing data. Personal data has extra rules, so follow the site's terms and privacy law. --- # Real estate, travel, cars and events scrapers > Collect events from Eventbrite, Meetup and Luma, and India property from 99acres and MagicBricks. Coming soon: Redfin, Realtor.com and Google Flights. URL: https://cliqtomedia.com/actors/real-estate-travel/ Homes, trips and events have one thing in common. Prices and dates change fast. Our tools collect this data so you can compare it in one place. Live today: one tool collects events from Eventbrite, Meetup and Luma. You get the name, date, place and link. Another tool collects property listings in India from 99acres and MagicBricks. Coming soon: US property listings from Redfin and Realtor.com (homes for sale, sold homes and rentals), and Google Flights prices for your route. All tools run on Apify. Export to CSV, JSON or Excel. You pay for use on Apify. ## Tools - [99acres & MagicBricks India Property Scraper - No Login](https://cliqtomedia.com/actors/india-property-listings/) (live): Get rent and sale homes from MagicBricks and 99acres in one table. - [Events Scraper: Eventbrite, Meetup & Luma — No Login](https://cliqtomedia.com/actors/events-aggregator/) (live): Get public events from three sites in one list. - [Google Flights Scraper - Prices & Times, No Login](https://cliqtomedia.com/actors/google-flights-scraper/) (live): Get Google Flights results for a route and dates as a table. - [Redfin & Realtor Listings Scraper (US): Sale, Sold & Rent](https://cliqtomedia.com/actors/us-property-listings/) (coming soon): Get US home listings from Redfin or Realtor.com for cities, ZIP codes or counties. ## Use cases - Compare home prices in one area. - Track sold prices to study a local market. - Watch flight prices for a route every day. - Build a local events calendar for a city. - Find rental listings for market research. ## Questions ### Can I get sold home prices? Yes. Our US listings tool can return homes for sale, sold homes and rentals. ### Can I track flight prices over time? Yes. Run the Google Flights tool on a schedule. Each run saves the prices of that day. ### Which countries do you cover for property? Right now we cover the US and India. Want another country? [Suggest it](/partners/#suggest) on our Partners page. We read every idea. ### Can I export the data to Excel? Yes. Apify lets you download results as Excel, CSV or JSON. --- # Social media and community scrapers > Collect public posts and profiles from Threads, Bluesky, Telegram channels, Medium, Pinterest, Hacker News and more. Reddit and Quora are coming soon. URL: https://cliqtomedia.com/actors/social/ People talk about brands, products and ideas every day. They do it on social media and in online communities. Our tools collect these public posts for you. You give a search word, a profile, a channel or a link. The tool returns posts in a clean table. You get the text, author, date, likes, replies and link. Some tools also return comments. Live today: Threads, Bluesky, Telegram channels, Medium, Truth Social, Pinterest, Bilibili, Hacker News, Product Hunt and Substack. Coming soon: Reddit, Quora, Weibo and Stack Exchange. Many tools need no login. They read public data only. All tools run on Apify. Export to CSV, JSON or Excel. You pay for use on Apify. ## Tools - [Substack Newsletter Scraper](https://cliqtomedia.com/actors/substack-newsletter-scraper/) (live): Get post data from public Substack feeds. - [Hacker News Stories & Comments Scraper](https://cliqtomedia.com/actors/hacker-news-stories-comments-scraper/) (live): Export Hacker News stories and comments as rows. - [Bilibili Scraper: Videos, Comments & Creators, No Login](https://cliqtomedia.com/actors/bilibili-scraper/) (live): Get public Bilibili data in clean rows. - [Bluesky Scraper — Posts, Profiles, Feeds & Threads, No Login](https://cliqtomedia.com/actors/bluesky-scraper/) (live): Get public Bluesky posts, profiles, threads and feeds as clean rows. - [Medium Article Scraper: Tags, Authors & Publications](https://cliqtomedia.com/actors/medium-articles-scraper/) (live): Get the newest Medium stories by tag, author or publication. - [Pinterest Search Scraper: Pins & Boards, No Login](https://cliqtomedia.com/actors/pinterest-search-scraper/) (live): Get pins and boards from Pinterest search, boards and profiles. - [Product Hunt Launches Scraper – Daily Top, No Login](https://cliqtomedia.com/actors/product-hunt-launches/) (live): Get Product Hunt daily leaderboards for any day or period up to 31 days. - [Reddit Scraper: Posts, Comments & Subreddits (No login)](https://cliqtomedia.com/actors/reddit-scraper/) (live): Get public Reddit posts and comments as clean rows. - [Telegram Channel Scraper - Posts & Views, No Login](https://cliqtomedia.com/actors/telegram-channel-scraper/) (live): Get posts from public Telegram channels as clean rows. - [Threads Scraper — Posts, Profiles, Replies & Search](https://cliqtomedia.com/actors/threads-scraper/) (live): Get public Threads posts without login. - [Truth Social Scraper - Posts & Profiles, No Login](https://cliqtomedia.com/actors/truth-social-scraper/) (live): Get public Truth Social posts and profiles by username. - [Weibo Scraper: Posts, Comments & Profiles, No Login](https://cliqtomedia.com/actors/weibo-scraper/) (live): Get public Weibo data without login. - [Quora Answers Scraper: Upvotes, Views & Authors, No Login](https://cliqtomedia.com/actors/quora-scraper/) (coming soon): Get public Quora answers for a question or a topic. - [Stack Overflow & Stack Exchange Q&A Scraper, No Login](https://cliqtomedia.com/actors/stack-exchange-scraper/) (coming soon): Pick a site and a tag, a search or a list of question links. ## Use cases - Track what people say about your brand. - Find common questions and pain points in your niche. - Collect posts to train or test an AI model. - Watch new launches on Product Hunt every day. - Study trends and topics for research. ## Questions ### Can I scrape Reddit without an API key? Our Reddit tool needs no login and no Reddit API key. You only need an Apify account. ### Can I get comments as well as posts? Many tools return comments or replies. Check the output fields on each tool page. ### Do you collect private posts? No. Our tools read public data only. ### Is it legal to scrape social media? Public posts are often fine to collect, but rules differ by site and country. Follow the site's terms and privacy law. Ask a lawyer about your case. --- # Video, audio and streaming data tools > Get YouTube transcripts, comments and search results. Turn audio and video files into text. Collect podcast data. SoundCloud is coming soon. URL: https://cliqtomedia.com/actors/video-audio/ Video and audio hold a lot of useful words. But you cannot search or analyze them easily. Our tools turn them into text and data. For YouTube, you can get transcripts, comments and search results. Give a video link or a search word. The tool returns clean text with times, or a table of comments. Another tool turns audio and video files into text. You can also transcribe podcast files. For podcasts, we cover Apple Podcasts. You get shows, RSS feeds and public contacts. Coming soon: video to text from TikTok, Reels and X links, a social video downloader and SoundCloud. The text is ready for AI tools, search or notes. All tools run on Apify. Export to JSON, CSV or Excel. You pay for use on Apify. ## Tools - [YouTube Subtitles & Transcript Scraper API](https://cliqtomedia.com/actors/youtube-transcript-scraper/) (live): Get the public captions of a YouTube video as full text and timed parts. - [YouTube Comments Scraper](https://cliqtomedia.com/actors/youtube-comments-scraper/) (live): Export public comments and replies from YouTube videos. - [Apple Podcast Directory & RSS Contacts Scraper](https://cliqtomedia.com/actors/podcast-directory-rss-contacts-scraper/) (live): Find podcasts on Apple by keyword or ID, or read a public RSS feed. - [Audio & Podcast Transcriber (Speech to Text)](https://cliqtomedia.com/actors/audio-video-transcriber/) (live): Turn audio files or podcast episodes into text. - [Social Video Downloader: TikTok, Instagram, X - No Login](https://cliqtomedia.com/actors/social-video-downloader/) (live): Save public videos from TikTok, Instagram, X, Facebook and more as files. - [YouTube Search Results Scraper — No Login](https://cliqtomedia.com/actors/youtube-search-scraper/) (live): Search YouTube by keyword and get each result as a row. - [Kick Live Streams & Viewer Count (Official API), No Login](https://cliqtomedia.com/actors/kick-channels/) (coming soon): Paste Kick channel names or links. - [SoundCloud Scraper - Tracks, Artists, Playlists & Plays](https://cliqtomedia.com/actors/soundcloud-scraper/) (coming soon): Get public SoundCloud track data by search, artist, playlist or link. - [Twitch Clips & VODs Scraper - Export by Channel and Date](https://cliqtomedia.com/actors/twitch-clips-vods/) (coming soon): Add Twitch channels and pick clips or VODs. - [Twitch Follower Count & Channel Stats (Helix API), No Login](https://cliqtomedia.com/actors/twitch-channels/) (coming soon): Paste Twitch logins or links. Get followers, bio, partner or affiliate status, last game, language and tags. You can also search channels.… - [Twitch Live Streams Scraper - Viewers by Game & Language](https://cliqtomedia.com/actors/twitch-streams/) (coming soon): Find who is live on Twitch right now. - [Video URL to Text: Transcribe TikTok, Reels, X, YouTube](https://cliqtomedia.com/actors/video-to-text/) (coming soon): Paste a video link and get the spoken words as text. - [YouTube Channel Videos Export - Views, Likes & Shorts](https://cliqtomedia.com/actors/youtube-channel-videos/) (coming soon): Paste channel links, @handles or IDs. - [YouTube Playlist Export (Data API), No Login](https://cliqtomedia.com/actors/youtube-playlist-export/) (coming soon): Paste playlist links or IDs. Get one row per playlist position in the same order as on YouTube. Each row has title, channel, date… - [YouTube Video Stats & Metadata (Data API), No Login](https://cliqtomedia.com/actors/youtube-video-details/) (coming soon): Paste video links or IDs. Get views, likes, comments, duration, tags, category and language. One row per video, with numbers as numbers.… ## Use cases - Get transcripts of many YouTube videos for AI summaries. - Collect YouTube comments to see what viewers think. - Turn short videos into text for content ideas. - Find podcasts and their public contacts for outreach. - Track top tracks and artists on SoundCloud. ## Questions ### Can I get YouTube transcripts in bulk? Yes. Give a list of video links in one run. The tool returns the text for each video. ### What if a video has no subtitles? Use our video to text tool. It listens to the audio and writes the text. ### Can I use the text with ChatGPT or Claude? Yes. The output is clean text. You can paste it or send it to an AI tool with the API. ### Which languages are supported? It depends on the tool and the video. Check the input options on each tool page. --- # Search, SEO and ads data tools > Get Google search results and Autocomplete ideas. Check sitemaps, metadata, JSON-LD and Google ad text. Coming soon: Google Trends, News and Images. URL: https://cliqtomedia.com/actors/search-seo/ SEO work needs a lot of search data. Checking Google by hand is slow. Our tools collect this data for you. Live today: Google search results. You get the position, title, link, snippet and related searches for each keyword. Google Autocomplete gives keyword ideas. It shows what people search for. You can also check your own site. Other tools read sitemaps, page metadata, Open Graph tags and JSON-LD data. For ads, you can see public ad text in the Google Ads Transparency Center. Coming soon: Bing and DuckDuckGo, Google News, Google Images, Google Trends, a site audit and Wayback Machine snapshots. Many tools need no login. All tools run on Apify. Export to CSV, JSON or Excel. You pay for use on Apify. ## Tools - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) (live): Get the phrases Google suggests when people start typing. - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) (live): Read JSON-LD structured data from a list of web pages. - [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/) (live): Turn a sitemap into a clean list of page URLs. - [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/) (live): Get the title, description, canonical and social tags of up to 100 pages. - [Google Ads Transparency Scraper - Ad Text, No Login](https://cliqtomedia.com/actors/google-ads-transparency-scraper/) (live): See which ads a brand runs on Google. - [Google Images Scraper - Image URLs, Sizes & Source Pages](https://cliqtomedia.com/actors/google-images-scraper/) (live): Type a search phrase and get Google Images results as a table. - [Google News Scraper - Real Article URLs, No Login](https://cliqtomedia.com/actors/google-news-scraper/) (live): Search Google News by keyword, topic or Top stories. - [Google Search Results Scraper (SERP) - No Login, Per Page](https://cliqtomedia.com/actors/google-search-scraper/) (live): Add keywords and get Google results as rows. - [Google Trends Scraper - Interest & Related, No Login](https://cliqtomedia.com/actors/google-trends-scraper/) (live): Get Google Trends data for many keywords in one run. - [AI Search Visibility Tracker (ChatGPT, Perplexity, Gemini)](https://cliqtomedia.com/actors/ai-search-visibility/) (coming soon): Ask ChatGPT, Perplexity and Gemini the questions your buyers ask. - [DuckDuckGo & Bing Search Scraper - No Login, Real URLs](https://cliqtomedia.com/actors/duckduckgo-bing-search/) (coming soon): Add keywords and get DuckDuckGo and Bing results as rows. - [SEO Site Audit: Broken Links, Meta Tags & Speed](https://cliqtomedia.com/actors/seo-site-audit/) (coming soon): Crawl one website from a start URL. - [Wayback Machine Snapshots & Archived Text (No Login)](https://cliqtomedia.com/actors/wayback-machine-snapshots/) (coming soon): Add a URL, a URL prefix or a domain. ## Use cases - Track your Google rank for a keyword list. - Find long-tail keyword ideas with Autocomplete. - Compare interest in topics with Google Trends. - Check titles, meta tags and structured data on many pages. - See which ads your competitors run. ## Questions ### Can I track my Google rankings? Yes. Run the search results tool on a schedule with your keywords. Then compare the positions over time. ### Can I choose the country and language? Our search tools let you set the country and language. Check the input on each tool page. ### Do I need a Google API key? No. You only need an Apify account. ### How is this different from an SEO suite? You get raw data and pay for use on Apify. There is no monthly plan from us. You choose how to use the data. --- # Review and app store scrapers > Collect reviews and ratings from the Apple App Store, Google Play, TrustRadius and OpenTable. Track app ranks. Trustpilot is coming soon. URL: https://cliqtomedia.com/actors/reviews-apps/ Reviews tell you what customers like and dislike. But they are spread across many sites. Our tools collect them into one table. For software reviews, we cover TrustRadius. You get the rating, text, date, author and company reply. For restaurants, we cover OpenTable reviews. Coming soon: Trustpilot and Steam reviews. For mobile apps, you can get reviews from the Apple App Store and Google Play. You can choose the country. Other tools search the app stores. They show app details and rank for a keyword. Use the data to find common problems, compare competitors or watch new reviews. Many tools need no login. Run them on a schedule to catch new reviews early. You can also send reviews to an AI tool for a short summary. All tools run on Apify. Export to CSV, JSON or Excel. You pay for use on Apify. ## Tools - [Apple App Store Reviews Scraper](https://cliqtomedia.com/actors/apple-app-store-reviews-scraper/) (live): Export public App Store reviews for your apps and countries. - [Google Play Reviews Scraper](https://cliqtomedia.com/actors/google-play-reviews-scraper/) (live): Export written Google Play reviews for your apps. - [TrustRadius Reviews Scraper](https://cliqtomedia.com/actors/trustradius-reviews-scraper/) (live): Get public TrustRadius software reviews as clean rows. - [App Store Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/app-store-apps-search/) (live): Search the Apple App Store for many keywords in many countries at once. - [Google Play Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/google-play-apps-search/) (live): Search Google Play for many keywords in many countries in one run. - [OpenTable Reviews & Restaurants Scraper, No Login](https://cliqtomedia.com/actors/opentable-reviews-scraper/) (live): Get OpenTable guest reviews with detailed ratings and owner replies. - [Trustpilot Reviews Scraper - Ratings & Replies, No Login](https://cliqtomedia.com/actors/trustpilot-reviews-scraper/) (live): Add a company domain and get its public Trustpilot reviews in a table. - [Steam Reviews & Game Details Scraper — No login](https://cliqtomedia.com/actors/steam-reviews/) (coming soon): Add a Steam app ID or store link. ## Use cases - Find the top complaints in your app reviews. - Compare your ratings with competitors. - Get alerts for new bad reviews. - Track your app rank for a keyword in the store. - Feed reviews to an AI tool for a summary. ## Questions ### Can I get reviews from one country only? Our app store tools let you choose the country. Check the input on each tool page. ### Can I get only new reviews? Set a limit on results and run the tool on a schedule. Then you see new reviews each time. ### Do you get company replies to reviews? Some tools return replies, for example Trustpilot. Check the output fields on each tool page. ### Can I see my app's search rank? Yes. Our app search tools show the rank of apps for a keyword. --- # AI-ready content and document tools > Turn web pages, PDFs and images into clean Markdown or text for LLMs and RAG. Take screenshots, read RSS feeds and extract news articles. URL: https://cliqtomedia.com/actors/ai-content/ AI models work best with clean text. Web pages have menus, ads and scripts. PDFs and images are hard to read for code. Our tools clean this up. Give a website link and get clean Markdown. One tool can crawl a whole site. It can also find pages that changed since the last run. Another tool returns Google results as Markdown for RAG. For documents, you can turn PDFs into Markdown chunks. OCR reads text from scanned PDFs and images. Other tools extract news articles, read RSS and Atom feeds, and export WordPress posts. Screenshot tools save pages as PNG, JPEG or PDF. The output is ready for LLMs, vector stores and AI agents. All tools run on Apify. You pay for use on Apify. ## Tools - [RSS & Atom Feed Reader / Monitor](https://cliqtomedia.com/actors/rss-atom-feed-reader-monitor/) (live): Paste one or more feed links and get each item as a row. - [WordPress Posts & Pages Scraper](https://cliqtomedia.com/actors/wordpress-posts-pages-scraper/) (live): Add a WordPress site URL and export its public posts and pages. - [News Article Extractor: RSS, URLs & Clean Text](https://cliqtomedia.com/actors/news-article-extractor/) (live): Paste news links or a news site. - [PDF & Image to Text OCR for AI Agents - No Login](https://cliqtomedia.com/actors/pdf-text-ocr/) (live): Give a link to a PDF or an image. - [RAG Web Search: Google Results as Clean Markdown](https://cliqtomedia.com/actors/rag-web-search/) (live): Type a question or topic and get the top Google pages as clean text. - [Website Screenshot & PDF Generator: Full Page & Mobile](https://cliqtomedia.com/actors/website-screenshot-pdf/) (live): Make full-page pictures or PDFs of a list of web pages. - [Website to Markdown for RAG: Crawl & Changed Pages](https://cliqtomedia.com/actors/website-to-markdown/) (live): Give a start URL and a page limit. - [Fast Webpage to Markdown API for AI Agents](https://cliqtomedia.com/actors/webpage-to-markdown-api/) (coming soon): Give a link and get the page as clean Markdown in a few seconds. - [LLM Web Data Extractor for OpenAI, Anthropic, Gemini Keys](https://cliqtomedia.com/actors/llm-web-extractor/) (coming soon): Give page links and the fields you want. - [PDF to Markdown for LLMs & RAG Chunks - No Login](https://cliqtomedia.com/actors/pdf-to-markdown/) (coming soon): Paste a PDF link and get Markdown with real headings, lists and tables. - [Screenshot API: URL to PNG, JPEG or PDF, Fast, No Login](https://cliqtomedia.com/actors/screenshot-api/) (coming soon): Send up to 200 links and get a picture or PDF of each page. - [Text Translator: 50 Languages, No API Key](https://cliqtomedia.com/actors/text-translator/) (coming soon): Send a list of texts and get translations in 50 languages. ## Use cases - Load your help center into a RAG chatbot. - Turn PDF reports into text an LLM can read. - Give an AI agent fresh web search results as Markdown. - Watch news feeds and save new articles. - Save screenshots of pages for records or reports. ## Questions ### Why use Markdown for LLMs? Markdown keeps headings and lists but drops page clutter. It uses fewer tokens than raw HTML. ### Can I crawl a whole website? Yes. Our website to Markdown tool can follow links or use the sitemap. ### Can it read scanned PDFs? Yes. Use our OCR tool. It reads text from scanned PDFs and images. ### Can my AI agent call these tools? Yes. Use the Apify MCP server or the API. See our AI agents page. --- # Leads, company data and validation tools > Find public contacts on websites. Verify emails and phone numbers. Check EU VAT numbers, search company registers and detect a site's tech stack. URL: https://cliqtomedia.com/actors/leads-companies/ Good leads start with clean, correct data. Our tools help you find companies and check your lists. To find leads, give a list of websites. Our contact tool returns public emails, phones and social links. You can also search Europages suppliers and Y Combinator companies. To check data, you can verify email lists in bulk. Other tools format phone numbers and check EU VAT numbers with VIES. This helps you avoid bounces and errors. For company facts, we cover official registers in France, Finland and Norway. We also cover LEI codes from GLEIF. For websites, you can look up WHOIS and DNS data. You can also detect the CMS and tech a site uses. All tools run on Apify. You pay for use on Apify. ## Tools - [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/) (live): Add a list of company websites. - [Bulk Email Verifier: MX, Disposable, Role & Typo Check](https://cliqtomedia.com/actors/email-verifier/) (live): Paste email addresses or pick a dataset from a lead scraper. - [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/) (live): Paste a list of domains. For each one, you get registrar, dates and days until expiry from the official registry. You also get live DNS… - [EU VAT Number Validator (VIES) - Bulk Check, No Login](https://cliqtomedia.com/actors/vat-number-validator/) (live): Paste a list of EU VAT numbers. - [Europages Scraper: B2B Suppliers & Certificates (No Login)](https://cliqtomedia.com/actors/europages-companies-scraper/) (live): Search Europages by product and country. - [France Company & SIRET Search](https://cliqtomedia.com/actors/france-sirene-company-search/) (live): Check French companies by SIREN, SIRET or VAT number. - [Norway Company Register (Brreg) & Updates](https://cliqtomedia.com/actors/norway-brreg-company-register/) (live): Look up Norwegian companies by organisation number, or search the register with filters. - [Phone Number Validator & Formatter - Bulk E.164, No Login](https://cliqtomedia.com/actors/phone-number-validator/) (live): Paste phone numbers in any format. - [Website Tech Stack Detector: CMS, Versions & CDN, No Login](https://cliqtomedia.com/actors/tech-stack-detector/) (live): Paste a list of websites. The tool checks each live page against 7,600+ technology fingerprints. You get one row per site with CMS, shop… - [YC Companies Scraper: Founders & Jobs, No Login](https://cliqtomedia.com/actors/y-combinator-companies/) (live): Pick a YC batch, industry or region. - [Bulk Email List Validator: Clean CSV, No Login](https://cliqtomedia.com/actors/bulk-email-validator/) (coming soon): Upload your email list as a CSV or Google Sheet link. - [Finland Company Register (PRH YTJ)](https://cliqtomedia.com/actors/finland-ytj-company-register/) (coming soon): Check Finnish companies by Business ID (Y-tunnus), or search by name and town. - [LEI Lookup & Change Monitor (GLEIF)](https://cliqtomedia.com/actors/lei-gleif-lookup/) (coming soon): Paste LEI codes or a company name. - [OpenStreetMap POI Extractor: Cafes, Shops, Hotels by City](https://cliqtomedia.com/actors/openstreetmap-poi-extractor/) (coming soon): Get places from OpenStreetMap for a city or a map box. ## Use cases - Find public contact details for a list of company websites. - Clean an email list before a campaign. - Check EU VAT numbers of new customers. - Get official company data from a national register. - Find sites that use a certain CMS or tool. ## Questions ### How do I verify an email list? Upload or paste your list into our email verifier. It checks the domain, mail server and common typos. ### Can I check EU VAT numbers in bulk? Yes. Our VAT tool checks many numbers in one run with the EU VIES service. ### Is it legal to collect business emails? Rules differ by country, for example GDPR in the EU. Use the data in line with privacy and anti-spam law. Ask a lawyer about your case. ### Which company registers do you cover? Right now France, Finland and Norway, plus global LEI data. Want another country? [Suggest it](/partners/#suggest) on our Partners page. We read every idea. --- # Developer and website monitoring tools > Monitor GitHub releases and npm packages. Scan dependencies with OSV. Check end-of-life dates, track vendor status pages and test URLs in bulk. URL: https://cliqtomedia.com/actors/developer/ Software changes every day. New releases, security issues and outages can surprise you. Our tools watch these changes for you. Track new GitHub releases and npm package versions. Scan your dependencies against the OSV vulnerability database. Check when your software versions reach end of life. Watch the status pages of your vendors and get new incidents. Compare OpenAPI specs to find breaking changes in an API. For websites, check many URLs at once. See status codes, redirects and broken links. Each run returns a clean table. Many tools also show what changed since the last run. Run these tools on a schedule. Then send results to Slack, email or your own system with a webhook. All tools run on Apify. You pay for use on Apify. ## Tools - [Link Route Audit — Bulk HTTP Status & Redirects](https://cliqtomedia.com/actors/bulk-url-status-redirect-checker/) (live): Paste a list of URLs and see where each one ends up. - [GitHub Releases Monitor & Scraper](https://cliqtomedia.com/actors/github-releases-monitor-scraper/) (live): Add up to 10 public repositories and get their releases as rows. - [Software End-of-Life Checker](https://cliqtomedia.com/actors/software-end-of-life-checker/) (live): Add rows like nodejs 18.20.4 or ubuntu 20.04, or a CSV. - [Dependency Vulnerability Scanner (OSV)](https://cliqtomedia.com/actors/osv-dependency-vulnerability-scanner/) (coming soon): Paste a package list, package.json, package-lock.json or requirements.txt. - [GitHub Repositories & Users Search (No Login)](https://cliqtomedia.com/actors/github-search/) (coming soon): Search GitHub with its own search syntax. - [OpenAPI Catalog & Breaking Change Detector](https://cliqtomedia.com/actors/openapi-spec-catalog-diff/) (coming soon): Compare an old and a new OpenAPI spec and see possible breaking changes. - [SSL Certificate Checker: Expiry, Chain & CT, No Login](https://cliqtomedia.com/actors/ssl-certificate-inspector/) (coming soon): Check the SSL certificate of many sites in one run. - [Statuspage Incidents Monitor — Vendor Status & Changes](https://cliqtomedia.com/actors/statuspage-incidents-monitor/) (coming soon): Check the status pages of vendors you use, like GitHub or Cloudflare. - [npm Package Metadata & Release Monitor](https://cliqtomedia.com/actors/npm-package-metadata-monitor/) (coming soon): List up to 100 npm packages and get one row for each. ## Use cases - Get a message when a library you use has a new release. - Find known vulnerabilities in your dependency list. - Plan upgrades before software reaches end of life. - Track outages of the services you depend on. - Check redirects and broken links after a site move. ## Questions ### Can I get alerts in Slack? Yes. Run the tool on a schedule. Then add a webhook or a Make, Zapier or n8n flow. ### Where does the vulnerability data come from? Our scanner uses OSV, a public vulnerability database. ### Do I need a GitHub token? Not always. A token can help with GitHub rate limits. Check the input on the tool page. ### Can I check thousands of URLs? Yes. The URL checker takes a list of links in one run. --- # Science and research data tools > Search and monitor arXiv papers, Europe PMC, ClinicalTrials.gov, DataCite, Google Patents, GBIF and museum collections. Export to CSV or JSON. URL: https://cliqtomedia.com/actors/research/ Research data is often public, but it is spread across many sites. Each site has its own search and format. Our tools bring this data into one clean table. Search papers on arXiv and Europe PMC. Watch for new papers and new versions. Search ClinicalTrials.gov for studies and track their status. Get details for patents from Google Patents. For data and citations, search DataCite datasets. Turn DOIs into full metadata and bibliography entries. We also cover nature and culture. Search GBIF for species records. Search open art at The Met and the Art Institute of Chicago. Track Wikipedia page views over time. Most tools use official public APIs. You do not need to write code or handle paging. All tools run on Apify. Export to CSV, JSON or Excel. You pay for use on Apify. ## Tools - [Google Patent Details Scraper](https://cliqtomedia.com/actors/google-patents-scraper/) (live): Add patent numbers or Google Patents links you already have. - [DOI Metadata & Bibliography Enrichment](https://cliqtomedia.com/actors/doi-bibliography-enrichment/) (live): Paste a list of DOIs and get one clean citation record each. - [ClinicalTrials.gov Studies Search & Monitor](https://cliqtomedia.com/actors/clinicaltrials-gov-studies-monitor/) (coming soon): Search ClinicalTrials.gov with simple filters and export study records. - [DataCite Research Dataset Search](https://cliqtomedia.com/actors/datacite-dataset-search/) (coming soon): Search DataCite for research datasets with simple filters. - [Europe PMC Literature Search & Monitor](https://cliqtomedia.com/actors/europe-pmc-literature-search/) (coming soon): Search Europe PMC for articles and preprints. - [GBIF Biodiversity Occurrence Search](https://cliqtomedia.com/actors/gbif-occurrence-search/) (coming soon): Search species records from GBIF with a few filters. - [Google Scholar Search Scraper - Citations & PDFs, No Login](https://cliqtomedia.com/actors/google-scholar-scraper/) (coming soon): Search Google Scholar and get one row per article. - [The Met & Art Institute of Chicago Artwork Search](https://cliqtomedia.com/actors/museum-open-access-search/) (coming soon): Search two big museum collections with one input. - [Wikipedia Pageviews & Trends Monitor](https://cliqtomedia.com/actors/wikipedia-pageviews-monitor/) (coming soon): See how many people read a Wikipedia article each day or month. - [arXiv Papers Search & Version Monitor](https://cliqtomedia.com/actors/arxiv-papers-monitor/) (coming soon): Search arXiv papers by words, category and dates. ## Use cases - Get new papers on your topic every week. - Track the status of clinical trials in a field. - Build a reference list from a list of DOIs. - Collect species records for a map or study. - Measure public interest in a topic with Wikipedia views. ## Questions ### Can I get new arXiv papers every day? Yes. Run the arXiv tool on a schedule with your search. It can show new papers and new versions. ### Where does the data come from? Most tools use official public APIs, like arXiv, Europe PMC and ClinicalTrials.gov. ### Can I export references for Zotero? Our DOI tool returns full metadata. Export it as JSON or CSV and import it into your tool. ### Do I need to know how to code? No. Fill the form on Apify and click Start. --- # Government and open data tools > Export open data to CSV or JSON. Sources include the World Bank, USAspending, FDA, USGS and NASA POWER. Also EU TED tenders and UK data. URL: https://cliqtomedia.com/actors/public-data/ Governments publish a lot of useful open data. But each portal has its own API, limits and format. Our tools give you a simple form and a clean table. For economy and contracts, export World Bank indicators. Track US federal awards on USAspending. Find EU public tenders on TED. For health, watch FDA recalls and look up US providers in the NPI registry. For cars, decode VIN numbers and check vehicle recalls. For weather and earth, get NASA POWER climate data, weather forecasts and alerts. You can also export USGS earthquakes and river data, and estimate solar panel output. For the UK, look up postcodes, bank holidays and carbon intensity. All tools run on Apify. Export to CSV, JSON or Excel. You pay for use on Apify. ## Tools - [EU TED Tenders Scraper & Monitor](https://cliqtomedia.com/actors/eu-ted-tenders-scraper/) (live): Find EU public tenders on TED with your own filters. - [UK Bank Holidays & Business Day Calculator](https://cliqtomedia.com/actors/uk-bank-holidays-business-days/) (live): Get UK bank holidays from GOV.UK for each part of the UK. - [UK Postcode Lookup](https://cliqtomedia.com/actors/gb-postcode-lookup/) (live): Paste a list of Great Britain postcodes and get map points and official area codes. - [USAspending Federal Awards & Recipient Monitor](https://cliqtomedia.com/actors/usaspending-federal-awards-monitor/) (live): Find US federal contracts, grants and loans from USAspending.gov. - [VIN Decoder & Vehicle Recalls](https://cliqtomedia.com/actors/vin-decoder-vehicle-recalls/) (live): Turn a list of VINs into clean vehicle rows with NHTSA data. - [FDA Recalls & Enforcement Monitor](https://cliqtomedia.com/actors/fda-recalls-enforcement-monitor/) (coming soon): Get FDA recalls for food, drugs and medical devices in one table. - [NASA POWER Historical Weather & Solar Data](https://cliqtomedia.com/actors/nasa-power-climate-data/) (coming soon): Get past weather and solar data for any latitude and longitude. - [NPI Registry Provider Lookup — US Practices & Taxonomies](https://cliqtomedia.com/actors/npi-registry-provider-lookup/) (coming soon): Search the public NPPES NPI Registry by specialty and place. - [Solar PV Yield Estimator (PVGIS)](https://cliqtomedia.com/actors/solar-pv-yield-estimator/) (coming soon): Estimate how much power a solar system makes at each site in your list. - [UK Carbon Intensity & Low-Carbon Windows](https://cliqtomedia.com/actors/uk-carbon-intensity/) (coming soon): See how clean the electricity grid is, half hour by half hour. - [US Health Data: CDC & HealthData.gov API, No login](https://cliqtomedia.com/actors/us-health-data-api/) (coming soon): Search the open data of the CDC and HealthData.gov by keyword or dataset ID. - [USGS Earthquake Events Export & Monitor](https://cliqtomedia.com/actors/usgs-earthquake-events/) (coming soon): Export earthquakes from the official USGS catalog with your own filters. - [USGS Water Data Export — Rivers & Streams](https://cliqtomedia.com/actors/usgs-water-data-export/) (coming soon): Export river flow and water level readings from USGS. - [Weather Forecast & Alerts Export (NWS + MET Norway)](https://cliqtomedia.com/actors/weather-forecast-alerts-export/) (coming soon): Get hourly or daily forecasts for up to 10 places in one table. - [World Bank Indicators Export — GDP & Population](https://cliqtomedia.com/actors/world-bank-indicators-export/) (coming soon): Export yearly World Bank data for the countries and indicators you pick. ## Use cases - Find new public tenders in your field every day. - Track FDA recalls for products you sell. - Add World Bank data to a report or dashboard. - Get historical weather data for a location. - Check vehicle recalls for a list of VIN numbers. ## Questions ### Why not use the official API directly? You can. Our tools save time: no code, no paging, and clean CSV output. ### Is this data free to use? Most open data is free to use, but licenses differ. Check the license of each source. ### Can I get only new records? Many tools are monitors. Run them on a schedule to see new or changed records. ### Can I export to Excel? Yes. Apify lets you download results as Excel, CSV or JSON. --- # Finance, markets and sports data tools > Export crypto prices and exchange rates. Get Polymarket and Kalshi data, SEC Form D filings and ATP and WTA tennis stats. URL: https://cliqtomedia.com/actors/finance/ Market data helps you test ideas and watch changes. Our tools give you clean history and fresh data in one table. For crypto, export prices and OHLC history. OHLC means open, high, low and close prices. For currencies, get historical exchange rates and convert amounts. For prediction markets, get Polymarket and Kalshi markets, prices and history. No login is needed. For startup funding, watch new SEC Form D filings. Companies file this form when they raise money. For sports, get ATP and WTA tennis matches, players and rankings. You can run these tools on a schedule to keep your data fresh. Or run them once to build a history. This is data, not advice. All tools run on Apify. Export to CSV, JSON or Excel. You pay for use on Apify. ## Tools - [SEC Form D Filing Monitor](https://cliqtomedia.com/actors/sec-edgar-form-d-funding-monitor/) (live): Find public Form D and D/A filings in SEC EDGAR by date or CIK. - [Crypto Prices & OHLC History Export - No Login](https://cliqtomedia.com/actors/crypto-market-data/) (live): Choose coins and get their price, market cap and 24h volume. - [Historical Exchange Rates & Currency Converter](https://cliqtomedia.com/actors/historical-fx-rates-converter/) (live): Get official ECB exchange rates for any pair and date since 1999. - [Polymarket & Kalshi Prediction Market Data, No Login](https://cliqtomedia.com/actors/prediction-markets-data/) (live): Search or look up markets on Polymarket and Kalshi. - [Tennis Scraper: ATP & WTA Matches, Players & Rankings](https://cliqtomedia.com/actors/tennis-stats-scraper/) (live): Get ATP and WTA match results, upcoming matches, player profiles and rankings. ## Use cases - Build a price history to test a trading idea. - Convert past invoices with the right exchange rate. - Compare prediction market odds across platforms. - Find startups that just raised money. - Build a tennis stats dataset for a model. ## Questions ### Is this investment advice? No. Our tools only collect data. They do not give advice. ### Can I get historical data? Yes. Our crypto, currency and prediction market tools can return history. ### What is SEC Form D? It is a US filing for some private fundraising. It can show which companies raised money. ### Do I need an API key? Usually not. You only need an Apify account. Check each tool page. --- # AI Search Visibility Tracker > Check if ChatGPT, Perplexity and Gemini name your brand. Get mention, position, rival brands and cited sources per question. You bring your own API keys. URL: https://cliqtomedia.com/actors/ai-search-visibility/ Category: Search, SEO & ads · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Ask ChatGPT, Perplexity and Gemini the questions your buyers ask. See if your brand is in the answer. Each row shows the place, the rival brands and the cited sites. You use your own API keys. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `best web scraping platform` in Prompts. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Check whether ChatGPT, Perplexity and Gemini name your brand when buyers ask them about your market. You write the questions, your brand and competitors; the Actor asks each AI through its official API with web search on and returns one row per question and AI: mentioned or not, in which place, which competitors came up and which websites the answer cited. - sends the prompt once through the provider's official API with web search enabled — OpenAI Responses API with the `web_search` tool, Perplexity Agent API, Gemini API with Google Search grounding; - reads the answer and finds your brand, its other spellings and your competitors as whole words, case-insensitive; - ranks the names in the order the answer first mentions them, so you see your position next to the competitors; - lists the cited sources and tells you whether one of them is on your own domain; - saves the answer text, an excerpt around the first mention, tokens and the time it was received. ### Good for - Track how often AI assistants recommend you versus competitors for the questions your buyers ask. - Find which pages AI answers cite for your category, so you know where to earn coverage. - Run the same prompt set every week with an Apify schedule and compare the mention rate over time. ### Not a good fit - API answers are not the same as the ChatGPT, Perplexity or Gemini apps. The apps add personal memory, account settings, location and their own system prompts, and they change often. The API with web search is the closest repeatable signal, not a copy of what one person sees on screen. - AI answers vary from run to run. One answer is a sample; use several prompts and repeat runs to see a trend. - The Actor never scrapes the consumer apps and never logs in anywhere. It only uses the public APIs with your key. - Position is the order of first mention among the names you track, not a place in a numbered list the AI might show. - Gemini's API has no location setting, so `country` applies only to OpenAI and Perplexity. ## Price Prices will be shown after release. ## Questions ### Do I need my own API key? Yes. You need a key from OpenAI, Perplexity or Gemini. Without a key you get one free row that says what is missing. ### Who pays the AI providers? You do. Your key is billed by the provider. Gemini needs billing on for web search. ### Does it read the ChatGPT app? No. It uses the official APIs with web search on. This is close to the app, not a copy of it. ### Are the answers always the same? No. AI answers change from run to run. Use several questions and repeat runs to see a trend. ### Why do results change between runs? AI answers are not deterministic and web results change. Ask several related prompts and repeat runs on a schedule; compare `mentionRate` in the run summary rather than single answers. ### Do you store my key or the answers anywhere else? The key is a secret input, encrypted by Apify and never written to the dataset, run summary or log. Answers go only to your run's dataset. ### Can I check Claude, Google AI Overviews or Copilot? Not in this version. It covers OpenAI, Perplexity and Gemini APIs. ## Data fields - `prompt` (string): Prompt from the input; null on a row about a whole AI (missing or rejected key). - `provider` (string): openai, perplexity or gemini; null when no key was given at all. - `model` (string): Model the provider says answered; null when there was no answer. - `requestedModel` (string): Model or preset asked for. - `status` (string): ok = answer checked (the only charged status); no_answer = the AI returned empty text; api_key_required = no key for this AI; error = see errorCode. - `brand` (string): Brand name from the input. - `mentioned` (boolean): true/false whether the answer names the brand; null when there is no answer. - `position` (integer): Place of the brand among the tracked names, in the order the answer first mentions them (1 = first). null when not mentioned. - `mentionCount` (integer): How many times the brand is named. - `competitorsMentioned` (array): Tracked competitors found in the answer: name, position, mentionCount. - `ranking` (array): Brand and competitors in the order the answer first names them. - `brandCited` (boolean): Whether a cited source is on your brandDomain; null when no domain was given or no answer. - `brandCitedPosition` (integer): Place of the first source from your domain among cited sources. - `citedSources` (array): Web sources the answer cites: position, url, title, domain. Gemini gives Google redirect links; the domain is the real site. - `citedSourcesCount` (integer): Number of cited sources. - `searchQueries` (array): Web searches the AI ran, when the API reports them. - `answerExcerpt` (string): About 400 characters around the first brand mention, or the start of the answer. - `answer` (string): Full answer text, up to 20000 characters. - `answerTruncated` (boolean): true when the answer was cut to 20000 characters. - `country` (string): Country from the input. - `countryApplied` (boolean): Whether the country was sent to this AI (false for Gemini). - `inputTokens` (integer): Input tokens billed to your key. - `outputTokens` (integer): Output tokens billed to your key, including thinking tokens. - `providerCostUsd` (number): Cost in USD that the provider reported for this answer (Perplexity only); null when not reported. - `latencyMs` (integer): Time the answer took. - `errorCode` (string): API_KEY_REQUIRED, API_KEY_INVALID, API_QUOTA_EXHAUSTED, API_RATE_LIMITED, MODEL_UNAVAILABLE, PROVIDER_BAD_REQUEST, PROVIDER_UPSTREAM_ERROR, DEADLINE_REACHED and others. - `errorMessage` (string): Short explanation and what to do. Never contains your key. - `fetchedAt` (string): When the answer was received, ISO 8601. ## Input settings - `prompts` (array, required): Questions a buyer might ask an AI assistant, for example "best CRM for small business". Up to 100, each up to 2000 characters. Each prompt is asked once per AI. - `brand` (string, required): Brand name to look for in the answers. Matching is whole-word and case-insensitive. - `brandAliases` (array): Optional: other names that count as your brand, for example a product name or "apify.com". Up to 10. - `brandDomain` (string): Optional, for example apify.com. When set, each row tells whether the AI cited a page from this domain (subdomains count) and in which place. - `competitors` (array): Optional competitor names to track in the same answers, up to 25. Add other spellings after a | sign: Bright Data|BrightData. - `providers` (array): Which AIs to ask. Empty = every AI you gave a key for. An AI picked here without a key gets one free api_key_required row telling where to get a key. - `geminiApiKey` (string): Your Google AI Studio key: aistudio.google.com/apikey. Google bills web-search answers to this key. Search (grounding) needs billing enabled on the key's Google Cloud project; the free tier does not include it. Stored encrypted, used only for this run, never written to logs or results. - `openaiApiKey` (string): Your OpenAI key: platform.openai.com/api-keys. Needs API credits; ChatGPT Plus does not include API use. Stored encrypted, used only for this run, never written to logs or results. - `perplexityApiKey` (string): Your Perplexity key: perplexity.ai/account/api/keys. Needs API credits. Stored encrypted, used only for this run, never written to logs or results. - `country` (string): Optional two-letter country code, for example US or DE. Sent to OpenAI and Perplexity as the searcher's approximate location. Gemini's API has no location setting, so its rows show countryApplied = false. - `openaiModel` (string): Model id with web search support. Empty = gpt-5.4-mini (fast and cheap). Bigger models cost more per answer on your key. - `perplexityPreset` (string): Perplexity Agent API preset. Empty = fast. Other presets may cost more per answer on your key. - `geminiModel` (string): Gemini model id. Empty = gemini-3.8-flash. ## Step by step on Apify 1. Open the Input tab. 2. Keep the prefilled prompt `best web scraping platform` or write your own under Prompts. 3. Enter your brand under Your brand (prefilled: `Apify`). 4. Paste at least one key — OpenAI, Perplexity, or Gemini from a Google AI Studio project with billing on — and pick that AI under AI assistants to check. 5. Click Start, then open the Visibility view of the dataset. ## Use cases | Task | Input | What you get | Key fields | Next step | |---|---|---|---|---| | Am I recommended for my category? | `prompts`, `brand`, `brandAliases` | One row per prompt and AI | `mentioned`, `position`, `answerExcerpt` | Run summary `mentionRate` per AI | | Who wins the answer instead of me? | `competitors` | Names in order of first mention | `ranking`, `competitorsMentioned` | Compare competitor mention rates in the run summary | | Which pages do AI answers trust? | `brandDomain` | Cited links per answer | `citedSources`, `brandCited` | Export the dataset and group by domain | | Is visibility changing over time? | Same input on a schedule | A new dataset each run | `fetchedAt`, `mentioned`, `position` | Schedule plus webhook or Google Sheets export | ## Tips - Use many questions. One AI answer is only a sample. - Add your domain to see if the AI cites your own site. - Add rival names. Use a pipe for other spellings, like Bright Data|BrightData. ## Limits - Up to 100 prompts per run, 3 AIs, 25 competitors, 10 brand aliases. - In our tests an answer took about 3 seconds on Perplexity, about 4 seconds on OpenAI and 15–27 seconds on Gemini, and 10 prompts on OpenAI and Perplexity finished in 44 seconds. Prompts for one AI run one after another and the AIs run side by side, so the run time grows with the number of prompts. A slower model or a rate-limited key takes longer. The default timeout is 1 hour. - One answer per prompt and AI per run; answers are not cached between runs. - No Claude, Google AI Overviews, Copilot or other assistants. ## Sample result ```json { "prompt": "best web scraping platform", "provider": "perplexity", "model": "openai/gpt-6-luna", "status": "ok", "brand": "Apify", "mentioned": true, "position": 1, "mentionCount": 1, "competitorsMentioned": [ { "name": "Octoparse", "position": 2, "mentionCount": 1 }, { "name": "ScrapingBee", "position": 3, "mentionCount": 1 }, { "name": "Bright Data", "position": 4, "mentionCount": 1 } ], "ranking": ["Apify", "Octoparse", "ScrapingBee", "Bright Data"], "brandCited": true, "brandCitedPosition": 3, "citedSources": [ { "position": 1, "url": "https://webscraper.io/blog/best-web-scraping-platforms", "title": "Best web scraping platforms compared - Web Scraper", "domain": "webscraper.io" }, { "position": 3, "url": "https://blog.apify.com/best-web-scraping-tools/", "title": "6. Octoparse", "domain": "blog.apify.com" } ], "citedSourcesCount": 6, "answerExcerpt": "**Apify is the best all-around choice for developers**: it combines ready-made scrapers (“Actors”) with custom code, cloud runs, scheduling, and storage…", "country": "US", "countryApplied": true, "inputTokens": 6325, "providerCostUsd": 0.00168, "errorCode": null, "fetchedAt": "2026-10-22T05:46:32.698Z" } ``` ## Similar tools - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) - [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/) - [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/) - [Google Ads Transparency Scraper - Ad Text, No Login](https://cliqtomedia.com/actors/google-ads-transparency-scraper/) - [Google Images Scraper - Image URLs, Sizes & Source Pages](https://cliqtomedia.com/actors/google-images-scraper/) --- # AliExpress Scraper: Products, Prices and Buyer Reviews > AliExpress scraper for search results and reviews: price, discount, rating, orders, delivery note and images, or review text. Pick country. No login. URL: https://cliqtomedia.com/actors/aliexpress-scraper/ Category: E-commerce & prices · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/aliexpress-scraper?fpr=cliqto Type keywords to get AliExpress products, or paste product links to get reviews. You pick the ship-to country and currency. No AliExpress login or cookies needed. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `usb c cable` in Search queries. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Type keywords or paste AliExpress product links, and get AliExpress search results or buyer reviews as one row each. Products come with price as a number, original price, discount, currency, rating, orders as a number, delivery note and images; reviews have stars, text, English translation, country, date and variant. No AliExpress login, no cookies, no API key. The prefilled search (10 products) costs about $0.014. - Search — for each keyword, it reads the AliExpress search results in page order (60 products per page) for the ship-to country and currency you pick. One row per product: price, original price, discount, currency, new-shopper price flag, rating, orders, delivery note, images, badges, ad flag and the position in the results. - Reviews — for each product link or ID, it reads the buyer reviews. One row per review: stars, text, English translation by AliExpress, reviewer country, date, variant, shipping method, photos and helpful votes, plus the product rating and total number of reviews. ### Good for - Find products by keyword and compare price, discount and orders across sellers. - Track how prices and discounts change for the same keywords over time (run on a schedule). - Read what buyers say about a product: stars, text in English, countries and variants. ### Not a good fit - No product page details: no store name, no exact shipping cost by method, no variants (SKU) list, no stock. Search cards give a delivery note only (for example `Free shipping` or `Delivery: Oct 20 - 25`). - Prices are the ones AliExpress shows to a new visitor. Often this is a new-shopper offer; the row marks it with `newShopperPrice: true`. Regular buyers may pay more. - aliexpress.ru, short share links (`a.aliexpress.com`) and other AliExpress apps are not supported. - Up to 1,000 products per keyword and 1,000 reviews per product. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.0015 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Search result | $0.0012 (from $0.00102 on paid Apify plans) | Charged for each product row saved from AliExpress search results (price, original price, discount, rating, orders, images). Keywords without results are free. | | Review | $0.0005 (from $0.000425 on paid Apify plans) | Charged for each review row saved, and once for a product that has no reviews. Wrong product links are free. | - One result: about $0.0027. - 1,000 results: about $1.20. - Every day 100 results, for 30 days: about $3.65 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/aliexpress-scraper?fpr=cliqto ## Questions ### Can I get the store name or exact shipping cost? No. Search cards give a delivery note only. Store name and SKU list are not included. ### Does it work with aliexpress.ru? No. aliexpress.ru and short share links are not supported. ### Are the reviews in English? You get the original text plus the English translation from AliExpress. ### How many products can I get? Up to 1,000 products per keyword and 1,000 reviews per product. ### Do I need an AliExpress account, cookies or API key? No. The Actor reads public pages without a login. ### What does a `null` value mean? AliExpress did not show this value for this product or review. It is not 0. For example, `rating: null` means the product has no rating yet. ### Are the results complete and fresh? The rows show what AliExpress shows at `fetchedAt`. AliExpress changes the order, prices and offers often and may show different results to different visitors. The Actor does not promise every product for a keyword. ## Data fields - `status` (string): complete: row read in full; partial: read but price or title missing (see error); no_reviews: AliExpress returned no reviews for this product (charged once, it is a definite answer). Invalid product URLs are not rows; they are listed in the RUN_SUMMARY record. - `productId` (string): AliExpress product ID (global site numbering; aliexpress.us IDs are converted). - `title` (string): Product title. - `url` (string): Product page on www.aliexpress.com. - `price` (number): Current price (lowest variant) for the ship-to country. - `originalPrice` (number): Price before discount, from the card or from the card's own price data when it gives the same discount; null when there is no such price. - `discountPercent` (number): Discount in percent. - `currency` (string): Currency code of the prices. - `priceText` (string): Price as AliExpress shows it; null on "FREE with any purchase" gift cards, whose price comes from the page data. - `newShopperPrice` (boolean): true when the price is a new-shopper offer (AliExpress search shows these by default), including "FREE with any purchase" gift cards; regular buyers may pay more. - `rating` (number): Average rating, 0–5. - `ordersCount` (number): Units sold as a number; "10,000+ sold" gives 10000. - `ordersText` (string): Units sold as AliExpress shows it. - `shippingText` (string): Delivery or free-shipping note from the search card, e.g. "Free shipping" or "Delivery: Oct 20 - 25"; null when the card shows none. Exact shipping cost is not on search cards. - `imageUrl` (string): Main image. - `images` (array): Image URLs. - `badges` (array): Selling-point tags on the search card, e.g. "Free shipping". - `sponsored` (boolean): true for an ad placement in search results. - `searchQuery` (string): Query that found the product. - `searchPage` (number): Results page number. - `searchPosition` (number): Position within the query results (1-based, ads included). - `shipTo` (string): Ship-to country used. - `reviewId` (string): Review ID (reviews mode). - `text` (string): Review text in the original language. - `translatedText` (string): English translation by AliExpress. - `country` (string): Reviewer's country code. - `date` (string): Review date, YYYY-MM-DD. - `dateText` (string): Review date as AliExpress shows it. - `reviewerName` (string): Masked public nickname as AliExpress shows it (e.g. J***e); null for anonymous reviews. - `variant` (string): Variant the reviewer bought. - `shippingMethod` (string): Shipping method the reviewer used. - `helpfulCount` (number): Helpful votes. - `additionalText` (string): Follow-up review text. - `productUrl` (string): Reviewed product page. - `productRating` (number): Product's average rating. - `productReviewsCount` (number): Product's total number of reviews. - `input` (string): Your input entry for this row. - `error` (string): What is missing or why the row has no data. - `source` (string): Always aliexpress. - `fetchedAt` (string): When the data was read (ISO 8601). ## Input settings - `mode` (string): Search: product cards from AliExpress search results. Reviews: buyer reviews of the products below. - `searchQueries` (array): Keywords as you would type them on AliExpress, e.g. "usb c cable" or "phone case iphone 16". Up to 20 queries. Used in Search mode. - `productUrls` (array): AliExpress product pages such as https://www.aliexpress.com/item/1005006727707575.html (aliexpress.com and aliexpress.us links work) or bare numeric product IDs. Up to 200. Short share links (a.aliexpress.com) and aliexpress.ru are not supported. Used in Reviews mode. - `shipTo` (string): Two-letter country code AliExpress ships to, e.g. US, GB, DE, FR, BR. Prices, discounts and delivery notes in Search mode depend on it. - `currency` (string): Currency for prices. - `maxItems` (integer): Search mode: most products per search query (1–1000; AliExpress shows 60 per results page). Default 50. - `maxReviews` (integer): Reviews mode: most reviews per product (1–1000), in AliExpress's default order. - `proxyConfiguration` (object): Not needed in most cases: the Actor switches to Apify Proxy on its own if AliExpress blocks direct requests. Residential proxy is not supported. ## Step by step on Apify 1. Open the Input tab. 2. Keep Mode = `Search` and the prefilled keyword `usb c cable` in Search queries, or type your own. 3. Keep Ship to = `US` and Currency = `USD`, or pick your country and currency. 4. Keep Max products per query = 10 (prefill) or raise it up to 1,000. 5. Click Start. 6. Open the Output tab, view Products, and check `price`, `originalPrice` and `ordersCount`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Product research for dropshipping | `searchQueries` | product | `price`, `ordersCount`, `rating`, `discountPercent` | Google Sheets, CSV | | Price and discount tracking | `searchQueries` + schedule | product | `price`, `originalPrice`, `newShopperPrice`, `fetchedAt` | Dataset API, webhooks | | Review analysis | `productUrls` (mode `reviews`) | review | `rating`, `translatedText`, `country`, `variant` | LLM or sentiment tools | | Prices for a local market | `shipTo` + `currency` | product | `price`, `currency`, `shipTo` | spreadsheet | ## Tips - Set the ship-to country and currency for your market. Prices change by country. - Watch the new shopper price flag. Regular buyers may pay more. - Run on a schedule with the same keywords to see price trends. ## Limits - search-result — each saved product row; - review — each saved review row, and one `no_reviews` row for a product that has no reviews (a definite answer). - Up to 20 keywords per run, 1,000 products per keyword; up to 200 products and 1,000 reviews per product in reviews mode. - Measured: 1,000 products in 47 seconds; 6 keywords × 1,000 products in about 22 minutes (with proxy after a block); 3 × 1,000 reviews in under 2 minutes. - Default run timeout is 1 hour. The Actor stops on its own before the timeout and keeps saved rows (`stopReason: TIMEOUT`). ## Sample result ```json { "status": "complete", "productId": "1005013255649235", "title": "240W 10A Cables Super Fast Charging Type C To Type C Silicone Cable For Samsung iPhone 17Pro Xiaomi 17 Quick Charging Cable New", "url": "https://www.aliexpress.com/item/1005013255649235.html", "price": 3.49, "originalPrice": 6.96, "discountPercent": 49, "currency": "USD", "priceText": "US $3.49", "newShopperPrice": true, "rating": 4.9, "ordersCount": 5000, "ordersText": "5,000+ sold", "shippingText": "Delivery: Oct 20 - 25", "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/S17ff1b936cd2428dab3deb72259dbc02M.png", "images": ["https://ae-pic-a1.aliexpress-media.com/kf/S17ff1b936cd2428dab3deb72259dbc02M.png"], "badges": ["Delivery: Oct 20 - 25", "Extra 2% off with coins"], "sponsored": false, "searchQuery": "usb c cable", "searchPage": 1, "searchPosition": 1, "shipTo": "US", "error": null, "source": "aliexpress", "fetchedAt": "2026-10-15T06:31:22.607Z" } ``` ## Use it from code Actor ID: `cliqtomedia/aliexpress-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/aliexpress-scraper").call(run_input={ "mode": "search", "searchQueries": [ "usb c cable" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~aliexpress-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"mode": "search", "searchQueries": ["usb c cable"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/aliexpress-scraper") result = tool.invoke({"run_input": {"mode": "search", "searchQueries": ["usb c cable"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/): Track prices and offers in shops and marketplaces. See changes before your customers do. ## Similar tools - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) - [Historical Exchange Rates & Currency Converter](https://cliqtomedia.com/actors/historical-fx-rates-converter/) - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) - [Coles, Woolworths & Aldi Price Scraper - No Login](https://cliqtomedia.com/actors/au-supermarket-prices/) - [Idealo Price Scraper: All Shop Offers, 6 Countries, No Login](https://cliqtomedia.com/actors/idealo-price-scraper/) - [Naver Shopping Scraper: Korea Products & Prices](https://cliqtomedia.com/actors/naver-shopping-scraper/) --- # App Store Search, Rank and App Details > App Store rank tracker for many keywords and countries in one run. Or look up apps by ID or URL. Ratings, price and version. No login. URL: https://cliqtomedia.com/actors/app-store-apps-search/ Category: Reviews & app stores · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/app-store-apps-search?fpr=cliqto Search the Apple App Store for many keywords in many countries at once. Each app gets a rank per term. Or look up known apps by ID, link or bundle ID. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `pdf scanner` in Search terms. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Search the Apple App Store for many keywords in many countries in one run and get a ranked list of apps with rating, price, version and developer — or look up exact apps by App ID, App Store URL or bundle ID. The data comes from Apple's official iTunes Search & Lookup API. No login, no API key, no browser. - Search mode (`mode: search`). Each term is searched in each country. Every term × country pair becomes its own ranked list: `rank` 1, 2, 3… Every row also carries its `term` and `country`, so you can put many keywords and markets in one table. - Lookup mode (`mode: lookup`). You give App IDs, App Store URLs or bundle IDs. The Actor returns the app details for each ID in each country you choose. An ID that is not in a country's store gets a clear `not_found` row. It is never silently dropped. ### Good for - Check which apps rank for a keyword in several countries in one run. - Watch where your app and your competitors rank for your main keywords. - Get fresh details (rating, version, price, size) for a list of known apps. - Check in which countries an app is available. Missing countries get `not_found` rows. ### Not a good fit - No downloads, installs, revenue or keyword search volume. Apple does not publish them, and this Actor does not estimate them. - No reviews and no top charts. For reviews, use Apple App Store Reviews Scraper. - `rank` is the position in Apple's Search API results. It is close to the search order in the App Store app, but not always the same. - Up to 200 apps per term and country. This is Apple's maximum, and Apple often returns a few fewer. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.003 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | App Store query answered | $0.0003 | One search (term × country) or one lookup batch (up to 100 IDs × country) that Apple answered, even with no apps. Failed or skipped queries are free. | | App row | $0.0012 (from $0.00075 on paid Apify plans) | One app with full details stored in the dataset. not_found and error rows are free. | - One app: about $0.0042. - 1,000 apps: about $1.20. - Every day 100 apps, for 30 days: about $3.69 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/app-store-apps-search?fpr=cliqto ## Questions ### Why is the rank different on my iPhone? The App Store app can personalise results and show ads. The API order is close, but not the same. ### Can I get downloads or revenue? No. Apple does not publish those numbers. ### Do I need an Apple account? No. It uses Apple's public iTunes Search API. ### Am I charged for missing apps? No. Not-found and error rows are free. ### How fresh is the data? Each row is fetched live from Apple during the run (`fetchedAt`). Apple may cache its own answers for up to a day, so a rating or version can lag slightly behind the App Store page. ## Data fields - `status` (string): Row result: complete (app data), not_found (search with no apps, or ID/bundle ID not in that country's store) or error (see errorCode). Only complete rows are charged. - `mode` (string): search or lookup. - `queryType` (string): What the row answers: term (keyword search), appId or bundleId (lookup). - `query` (string): Your search term, App ID or bundle ID exactly as processed. A grouped status row lists all IDs or terms it covers, separated by commas (see queryIds). - `queryIds` (array): Only on grouped status rows: the IDs (or search terms) this one row covers. Used for lookup not_found/error rows (one row per batch of up to 100 IDs in one country) and for the one row that lists queries not sent to a country Apple rejected. null on app rows and normal search rows. - `term` (string): Search term (search mode); null for lookups. - `country` (string): Two-letter App Store country (storefront) code, e.g. us, de. - `entity` (string): App type searched: software (iPhone), iPadSoftware or macSoftware; null for lookups. - `rank` (integer): 1-based position in the iTunes Search API results for this term and country (deduplicated). Close to, but not guaranteed identical to, the App Store app's own search order. Null for lookups. - `isTracked` (boolean): True when this app is one of your trackAppIds; null when no apps are tracked. - `trackId` (integer): Apple App ID (the number in the App Store URL after 'id'). - `bundleId` (string): Bundle identifier, e.g. com.adobe.scan.ios. - `name` (string): App name in this country's store. - `kind` (string): Apple kind: software or mac-software. - `sellerName` (string): Legal seller name shown on the App Store. - `developerName` (string): Developer (artist) name. - `developerId` (integer): Apple developer ID. - `developerUrl` (string): Developer page on the App Store. - `sellerUrl` (string): Developer website, when the app lists one. - `price` (number): Upfront price in the store currency; 0 for free apps. In-app purchases are not included. - `formattedPrice` (string): Price as Apple displays it, e.g. Free or $4.99. - `currency` (string): ISO currency of the price, e.g. USD. - `primaryGenre` (string): Primary category, e.g. Productivity. - `primaryGenreId` (integer): Apple genre ID of the primary category. - `genres` (array): All categories listed for the app. - `averageUserRating` (number): Average star rating (0–5) in this country across all versions. Null when the app has no ratings yet (userRatingCount 0) or Apple returns none. - `userRatingCount` (integer): Number of ratings in this country across all versions. - `averageUserRatingCurrentVersion` (number): Average rating for the current version, as Apple reports it; null when the current version has no ratings. - `userRatingCountCurrentVersion` (integer): Number of ratings for the current version, as Apple reports it. - `version` (string): Current version string. - `releaseDate` (string): Original release date (ISO 8601). - `currentVersionReleaseDate` (string): Release date of the current version (ISO 8601). - `fileSizeBytes` (integer): Download size in bytes. - `contentRating` (string): Age rating, e.g. 4+ or 12+. - `minimumOsVersion` (string): Minimum OS version required. - `languages` (array): Supported languages as Apple lists them (ISO 639-1, upper case; Apple sometimes repeats a code, e.g. ZH for both Chinese variants). - `supportedDevicesCount` (integer): Number of supported device models Apple lists. - `url` (string): App Store page URL. - `iconUrl` (string): App icon (512 px when available). - `screenshotUrls` (array): iPhone (or Mac) screenshot URLs. ## Input settings - `mode` (string): search: keyword search, one ranked list per term and country. lookup: exact app details by App ID, App Store URL or bundle ID. - `terms` (array): Keywords to search, e.g. pdf scanner. Up to 50 terms; terms × countries must be at most 100 searches per run. Each term is searched separately and gets its own rank 1, 2, 3… - `countries` (array): Two-letter App Store country codes, e.g. us, gb, de, jp. Up to 50. Every term (or ID) is processed in every country. A code Apple does not support returns an error row for that country instead of failing the run. - `limit` (integer): How many apps to return per search (1–200). Apple sometimes returns fewer apps than asked; the run never pads results. - `entity` (string): Which apps to search: iPhone apps (software), iPad-only apps (iPadSoftware) or Mac apps (macSoftware). - `trackAppIds` (array): Optional App IDs or App Store URLs to track. Their rows get isTracked = true, and RUN_SUMMARY reports each tracked app's rank per term and country, or not_in_results when it is outside the returned list. - `appIds` (array): Numeric App IDs (e.g. 284882215), id284882215, or App Store URLs such as https://apps.apple.com/us/app/facebook/id284882215. Up to 500 IDs and bundle IDs together. An app missing in a country returns a not_found row (not charged). - `bundleIds` (array): Bundle identifiers such as com.adobe.scan.ios. Matching is case-insensitive. - `includeDescription` (boolean): Adds the full App Store description and What's New text. Makes rows much larger. ## Step by step on Apify 1. Open the Input tab. It is prefilled with `terms: ["pdf scanner"]`, `countries: ["us"]` and `limit: 20`. 2. Add more terms or countries if you want, for example `de` and `jp`. 3. Click Start. 4. Open the Output tab, choose the Search results view, and sort by `term`, `country` and `rank`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Keyword research in many markets | `terms` + `countries` | Ranked app per term and country | `term`, `country`, `rank`, `name`, `userRatingCount` | Export CSV or Google Sheets | | Track your app's keyword rank | `terms` + `countries` + `trackAppIds` | Rank tracking in `RUN_SUMMARY` | `rankTracking[].rank`, `status` | Schedule daily, compare runs | | Competitor app monitoring | `mode: lookup` + `appIds` | App details per country | `version`, `currentVersionReleaseDate`, `averageUserRating`, `price` | Schedule weekly, alert on change | | Availability check by country | `mode: lookup` + `bundleIds` + `countries` | App row or `not_found` row | `status`, `country`, `queryIds` | Filter `status = not_found` | | AI agent app search | `terms` (MCP) | Ranked app | `name`, `trackId`, `url`, `averageUserRating` | Agent answer or next tool call | ## Tips - Put many terms and countries in one run to save time. - Schedule a daily run and compare ranks over time. - Filter not_found rows to see where an app is missing. ## Limits - Up to 50 terms and 50 countries, and at most 100 term × country searches per run. - Up to 500 App IDs and bundle IDs together. At most 100 lookup batches per run (up to 100 IDs per batch, per country). - Up to 200 apps per search. Apple often returns a few fewer, and the Actor never pads results. - Give the run a timeout of at least 60 seconds (the default is 300). - The Actor waits at least half a second between requests to Apple, with at most 3 requests at a time. A run stops calling Apple after about 4 minutes, even with a longer timeout. Unfinished queries are listed as `NOT_PROCESSED` rows. - If Apple slows the Actor down (HTTP 429 or 403), it waits and slows its pace. After 8 such answers in one run it stops calling Apple. It also stops after 2 failed requests in a row or 4 failed requests in total. The rows already stored stay, and the rest are listed as `NOT_PROCESSED`. - If Apple rejects a country code, the Actor does not send other queries for that country. They are listed together in one error row per country, with the terms or IDs in `queryIds`. - Data comes from Apple's public iTunes Search API. Apple's terms apply to its use. App names, icons and screenshots belong to their owners. ## Sample result ```json { "status": "complete", "mode": "search", "queryType": "term", "query": "pdf scanner", "queryIds": null, "term": "pdf scanner", "country": "us", "entity": "software", "rank": 1, "isTracked": null, "trackId": 1199564834, "bundleId": "com.adobe.scan.ios", "name": "Adobe Scan: PDF & Doc Scanner", "kind": "software", "sellerName": "Adobe Inc.", "developerName": "Adobe Inc.", "developerId": 331646274, "developerUrl": "https://apps.apple.com/us/developer/adobe-inc/id331646274", "sellerUrl": null, "price": 0, "formattedPrice": "Free", "currency": "USD", "primaryGenre": "Business", "primaryGenreId": 6000, "genres": ["Business", "Productivity"], "averageUserRating": 4.87591, "userRatingCount": 1598867, "averageUserRatingCurrentVersion": 4.87591, "userRatingCountCurrentVersion": 1598867, "version": "26.09.29", "releaseDate": "2017-05-31T14:12:55Z", "currentVersionReleaseDate": "2026-09-29T18:04:04Z", "fileSizeBytes": 418327552, "contentRating": "4+", "minimumOsVersion": "18.0", "languages": ["EN", "DE", "FR", "JA"], "supportedDevicesCount": 130, "url": "https://apps.apple.com/us/app/adobe-scan-pdf-doc-scanner/id1199564834", "iconUrl": "https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/33/ce/2e/33ce2ed1-047b-9bf5-452b-f1a2f54e4d39/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/512x512bb.jpg", "screenshotUrls": ["https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/30/ec/ab/30ecab7d-94c6-d7f6-7e0e-084b2b443837/01_Scan_iOS_6.7_1284x2778_en-US.jpg/320x480bb.jpg"], "ipadScreenshotUrls": ["https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/84/93/92/8493921b-bd41-eee2-f782-7ce6425545e2/01_Scan_iOS_iPad_2048x2732_en-US.jpg/360x480bb.jpg"], "description": null, "releaseNotes": null, "errorCode": null, "errorMessage": null, "source": "apple-itunes-search-api", "sourceUrl": "https://itunes.apple.com/search?term=pdf+scanner&country=us&media=software&entity=software&limit=20", "fetchedAt": "2026-10-13T04:59:45.285Z" } ``` ## Use it from code Actor ID: `cliqtomedia/app-store-apps-search` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/app-store-apps-search").call(run_input={ "mode": "search", "terms": [ "pdf scanner" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~app-store-apps-search/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"mode": "search", "terms": ["pdf scanner"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/app-store-apps-search") result = tool.invoke({"run_input": {"mode": "search", "terms": ["pdf scanner"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Read new reviews, yours and theirs](https://cliqtomedia.com/actors/use-cases/review-monitoring/): Collect reviews from the App Store, Google Play and more. Find what people love and what they hate. ## Similar tools - [Apple App Store Reviews Scraper](https://cliqtomedia.com/actors/apple-app-store-reviews-scraper/) - [Google Play Reviews Scraper](https://cliqtomedia.com/actors/google-play-reviews-scraper/) - [TrustRadius Reviews Scraper](https://cliqtomedia.com/actors/trustradius-reviews-scraper/) - [Google Play Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/google-play-apps-search/) - [OpenTable Reviews & Restaurants Scraper, No Login](https://cliqtomedia.com/actors/opentable-reviews-scraper/) - [Trustpilot Reviews Scraper - Ratings & Replies, No Login](https://cliqtomedia.com/actors/trustpilot-reviews-scraper/) --- # Apple App Store Reviews Scraper > App Store reviews scraper for public Apple reviews by app and country. Get ratings, text and dates. Export to CSV or Excel. No Apple account. URL: https://cliqtomedia.com/actors/apple-app-store-reviews-scraper/ Category: Reviews & app stores · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/apple-app-store-reviews-scraper?fpr=cliqto Export public App Store reviews for your apps and countries. Each review has a stable ID, so you can merge runs later. A run report explains any stop. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `324684580` in Apple app IDs. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Apple App Store Reviews Scraper exports public reviews by app and country. Save the results as JSON, CSV, Excel, XML, or read them through the Apify API. - Up to 2,000 reviews for each app and country. - Up to 10,000 reviews in one run. - One Dataset row for each unique review. - Stable IDs for updates and later comparisons. - Review data for several apps and countries in one run. - A run report that explains every stop or error (`RUN_SUMMARY`). - No Apple account, API key, proxy, or browser setup. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Apple App Store review | $0.0001 | One unique review stored in the default Dataset. | | Start fee | $0.036 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | - One review: about $0.04. - 1,000 reviews: about $0.14. - Every day 100 reviews, for 30 days: about $1.38 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/apple-app-store-reviews-scraper?fpr=cliqto ## Questions ### Can I get every old review? No. Apple shows a changing window of public reviews. ### Are the newest reviews first? Not always. Apple controls the order. ### Can I get developer replies? No. Replies are not in the output. ### Do I need an Apple account? No. No account, API key or proxy is needed. ### Can I get all historical reviews? No. The Actor returns up to 100 current source pages. This is not a complete history. ### How do I remove repeated reviews across runs? Use `recordId` as the update key. It combines the app ID, country, and Apple review ID. ### What happens after a late error? Reviews already saved remain available. Open `RUN_SUMMARY` to see the stop reason and affected app-country pair. ### Can I filter by date, rating, or keyword? There are no such input filters. Export the reviews and filter the saved rows in your own tool. The Actor does not monitor only new reviews. Repeated runs collect a fresh bounded snapshot; use `recordId` to merge them. ## Data fields - `schemaVersion` (string) - `recordId` (string) - `reviewId` (string) - `appId` (string) - `appName` (string) - `appUrl` (string) - `country` (string) - `sort` (string) - `authorName` (string) - `title` (string) - `text` (string) - `rating` (integer) - `appVersion` (string) - `reviewedAt` (string) - `helpfulVotes` (integer) - `totalVotes` (integer) - `isEdited` (boolean) - `sourcePage` (integer) - `sourceTransport` (string) - `sourceUrl` (string) - `scrapedAt` (string) ## Input settings - `appIds` (array): Add numeric Apple app IDs. You can add up to 50 IDs and URLs in total. - `startUrls` (array): Add App Store product URLs. The Actor reads the app ID from each URL. - `countries` (array): Add two-letter country codes, such as us, gb, or de. Each country is a separate App Store market. - `sort` (string): Apple chooses the review order. The order may change between runs. - `maxReviewsPerAppCountry` (integer): Save up to this many reviews for each app and country. The maximum is 2,000. - `maxReviewsTotal` (integer): Stop after saving this many unique reviews across the whole run. ## Use cases | Task | Input choice | Key fields | Next step | |---|---|---|---| | Compare feedback by market | One app, `countries: ["us", "gb"]` | `country`, `rating`, `text` | Export to CSV and compare groups | | Study common product issues | App IDs and a small cap | `title`, `text`, `reviewedAt` | Filter the exported rows | | Merge repeated snapshots | The same app and country | `recordId`, `scrapedAt`, `isEdited` | Update your own database by `recordId` | ## Tips - You can get up to 2,000 reviews per app and country. - Use the record ID as the key when you merge runs. - Run it regularly. Apple shows a changing set of reviews. ## Limits Apple provides a changing window of public reviews. This Actor does not promise a complete review history. - Each source page can contain up to 20 reviews. - The Actor requests up to 100 pages for each app and country. - The maximum is 2,000 reviews for each app and country. - The whole run stops at 10,000 saved reviews. - Apple controls the order shown as `appleDefault`. - Different countries can return different reviews. - A run can return fewer reviews than you request. ## Sample result ```json { "appIds": ["324684580"], "countries": ["us"], "maxReviewsPerAppCountry": 1, "maxReviewsTotal": 1 } ``` ## Use it from code Actor ID: `cliqtomedia/apple-app-store-reviews-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/apple-app-store-reviews-scraper").call(run_input={ "appIds": [ "324684580" ], "countries": [ "us" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~apple-app-store-reviews-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"appIds": ["324684580"], "countries": ["us"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/apple-app-store-reviews-scraper") result = tool.invoke({"run_input": {"appIds": ["324684580"], "countries": ["us"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Read new reviews, yours and theirs](https://cliqtomedia.com/actors/use-cases/review-monitoring/): Collect reviews from the App Store, Google Play and more. Find what people love and what they hate. ## Similar tools - [Google Play Reviews Scraper](https://cliqtomedia.com/actors/google-play-reviews-scraper/) - [TrustRadius Reviews Scraper](https://cliqtomedia.com/actors/trustradius-reviews-scraper/) - [App Store Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/app-store-apps-search/) - [Google Play Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/google-play-apps-search/) - [OpenTable Reviews & Restaurants Scraper, No Login](https://cliqtomedia.com/actors/opentable-reviews-scraper/) - [Trustpilot Reviews Scraper - Ratings & Replies, No Login](https://cliqtomedia.com/actors/trustpilot-reviews-scraper/) --- # arXiv Papers Search and Version Monitor > arXiv API tool to search papers by query, category and dates. Export authors, abstracts and DOI. Compare runs to find new papers and versions. URL: https://cliqtomedia.com/actors/arxiv-papers-monitor/ Category: Science & research data · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Search arXiv papers by words, category and dates. Save authors, abstracts and links as JSON or CSV. Pass your last snapshot to see new papers and new versions. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `cs.AI` in Categories. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Search arXiv paper metadata by query, categories and dates. Get authors, abstracts, DOI links and version changes for your research feed, without an API key. ## Price Prices will be shown after release. ## Questions ### Do I need an arXiv API key? No. The tool uses the public arXiv metadata API. ### Does it download PDFs? No. It saves metadata and article links. ### How do I get only new papers? Paste your last snapshot and turn on onlyNew. ### Does it schedule itself? No. Set a schedule in Apify if you want regular runs. ## Data fields - `id` (string): Unversioned arXiv ID, such as 2610.13948 or hep-th/9711200. - `versionedId` (string): arXiv ID with version suffix, such as 2610.13948v1. - `title` (string): Paper title with line breaks and repeated spaces normalized. - `published` (string): ISO timestamp of the first submission (v1). - `updated` (string): ISO timestamp of the received version. - `absUrl` (string): HTTPS arXiv abstract page for this version. - `provider` (string): Data provider name: arXiv. - `sourceUrl` (string): HTTPS source article URL on arXiv. - `fetchedAt` (string): ISO time when the Actor parsed this source response. - `sourceUpdatedAt` (string): Source timestamp of the record, same as updated. - `licenseStatus` (string): source_provided when a paper license was in the feed, otherwise not_in_atom_feed. - `metadataLicense` (string): License of the descriptive metadata (CC0-1.0); it does not cover the PDF. - `changeType` (string): Change against previousSnapshot: new, new_version, withdrawn, metadata_updated, unchanged or older_version. - `abstract` (string): Metadata abstract with TeX and Unicode preserved. Null if missing or includeAbstract is false. - `primaryCategory` (string): Main arXiv category, such as cs.AI. Null if absent. - `doi` (string): DOI supplied by arXiv. Null if absent. - `journalRef` (string): Journal reference supplied by arXiv. Null if absent. - `comment` (string): Author comment from arXiv, such as page counts or a withdrawal notice. Null if absent. - `pdfUrl` (string): arXiv PDF link when the feed provides one. The PDF is not downloaded. Null if absent. - `license` (string): Full-paper license when the Atom feed provides it. Normally null, meaning unknown, not a reuse permission. - `withdrawalEvidence` (string): explicit_notice_in_comment_or_abstract when a withdrawal notice was found, otherwise null. - `version` (integer): Source version number of the received record, such as 1. - `authors` (array): Author names in source order. - `categories` (array): All arXiv category codes of the paper, such as cs.AI and cs.LG. - `withdrawn` (boolean): True for an explicit withdrawal text notice; null when no notice is known. Not an authoritative status check. ## Input settings - `query` (string): arXiv API query, such as ti:transformer. Combined with categories using AND. Empty uses categories. - `categories` (array): Match any of these arXiv category codes. Combined with query using AND. Use [] for query-only search. - `dateFrom` (string): Inclusive YYYY-MM-DD. Overrides lastDays; omit for the rolling start. - `dateTo` (string): Inclusive YYYY-MM-DD. Omit for no upper bound. - `lastDays` (integer): Rolling UTC date start if dateFrom is absent. 0 removes the start date. Seven days covers regular weekend gaps. - `dateField` (string): submitted uses original submission date. updated filters received records locally, sorts newest updated first, and scans at most 500. - `maxResults` (integer): Maximum output rows, not a promise of complete query coverage. Source scan is also capped at 500. - `sortBy` (string): arXiv sort field. In updated-date mode this is always lastUpdatedDate. - `sortOrder` (string): Source order. In updated-date mode this is always descending. - `previousSnapshot` (array): Paste OUTPUT.snapshot from a previous run. Each record needs unversioned id and version; updated and withdrawn are optional. Up to 5,000 unique records. - `onlyNew` (boolean): Requires a nonempty previousSnapshot. Excludes unchanged and older versions; includes first-seen papers, new versions, metadata updates and withdrawal notices. - `includeAbstract` (boolean): Include metadata abstracts. False sets abstract to null. No PDFs or full texts are downloaded. ## Step by step on Apify 1. Open Input. 2. Keep the example: `categories: ["cs.AI"]`, `lastDays: 7`, `maxResults: 25`. 3. Click Start. 4. Open Papers in the output. Check `id`, `title`, `authors` and `updated`. 5. Export JSON or CSV. Open Snapshot and summary to copy the snapshot for another run. ## Use cases | Task | Useful settings | Key fields | |---|---|---| | A team research feed | Categories and recent days | Title, authors, abstract, links | | A literature search | Query plus subject codes | ID, abstract, DOI, journal reference | | Watch paper revisions | Previous snapshot and `onlyNew` | Version, updated, changeType | | Review withdrawal notices | Query or categories, then review text | Comment, withdrawalEvidence | | Prepare a metadata index | Export JSON or CSV | ID, categories, provenance | ## Tips - Use arXiv search rules, like ti: for title or au: for author. - Save the snapshot from each run and paste it into the next run. - A run can check up to 500 papers. Use short date windows for old topics. ## Limits - At most 500 saved papers and 500 scanned source records per run. Broad searches are not full-archive exports. - Updated-date filtering and `onlyNew` can scan many records without saving rows. Narrow the query or date scope and read the summary. - Source retries, response size and total work are bounded. Source work stops within an internal 180-second limit, even with a longer platform timeout. Use the default 300-second timeout and 256 MB memory. - arXiv may reject a query, delay an update or become unavailable. Source failure is reported as error or partial, not an empty successful search. - Withdrawal is a text-notice check, not a full registry of retractions. Absence never proves withdrawal. No notice means unknown, not confirmed active. - Article licenses are normally not provided by Atom. Review the article page and license before reusing full content. - No PDFs, full text, citation counts, peer-review checks or enrichment from other databases. ## Sample result ```json { "id": "2610.13948", "version": 1, "title": "Can Language Models Play the Wikipedia Game?", "authors": [ "Author One", "Author Two", "Author Three" ], "primaryCategory": "cs.AI", "published": "2026-10-09T17:59:56Z", "updated": "2026-10-09T17:59:56Z", "doi": null, "license": null, "changeType": "new", "absUrl": "https://arxiv.org/abs/2610.13948v1" } ``` ## Similar tools - [DOI Metadata & Bibliography Enrichment](https://cliqtomedia.com/actors/doi-bibliography-enrichment/) - [Google Patent Details Scraper](https://cliqtomedia.com/actors/google-patents-scraper/) - [ClinicalTrials.gov Studies Search & Monitor](https://cliqtomedia.com/actors/clinicaltrials-gov-studies-monitor/) - [DataCite Research Dataset Search](https://cliqtomedia.com/actors/datacite-dataset-search/) - [Europe PMC Literature Search & Monitor](https://cliqtomedia.com/actors/europe-pmc-literature-search/) - [GBIF Biodiversity Occurrence Search](https://cliqtomedia.com/actors/gbif-occurrence-search/) --- # Ashby Jobs Scraper: Export Public Ashby Job Boards > Ashby jobs scraper for known boards: job descriptions, locations, apply links and published pay as structured rows. JSON or CSV. No Ashby login. URL: https://cliqtomedia.com/actors/ashby-jobs-scraper/ Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/ashby-jobs-scraper?fpr=cliqto Add a known Ashby board name, like ramp. You get each current job as one row with description, location and apply link. Pay is shown only when the employer posts it. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `ramp` in Ashby boards or job URLs. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Export current public jobs from Ashby job boards as one structured row per job. Get descriptions, locations, apply links and compensation published by the employer. Add a known board such as `ramp`. The new Input form saves up to 10 jobs for a first run. The applied price is $0.00085 per start at default memory plus $0.75 per 1,000 saved jobs, with platform usage included. Check `RUN_SUMMARY` for empty or partial results. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Useful job row | $0.00075 | One useful job row saved to the default Dataset. | | Start fee | $0.00085 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | - One job: about $0.0016. - 1,000 jobs: about $0.75. - Every day 100 jobs, for 30 days: about $2.28 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/ashby-jobs-scraper?fpr=cliqto ## Questions ### Can it find every company on Ashby? No. You need to know the board name. It does not search across companies. ### Does remote mean fully remote? Not always. A job can be marked remote and also hybrid. Check both fields. ### Does every job show pay? No. Pay appears only when the employer publishes it. ### Do I need an Ashby login? No. It reads the public job postings. ### Does it discover all companies or search all Ashby jobs? No. Supply the known boards you want. It reads a current snapshot of those boards. ### Does every job include pay and all locations? No. Only employer-published source values are available. Missing values remain null or empty according to the field reference. ### Can I monitor changes? You can compare scheduled snapshots in your own system. There is no built-in delta mode. The same input can return the same jobs on a repeat run; those new saved rows are charged again. ### Is an empty run free? It has no saved-job event charge. An enabled Actor-start event is still charged automatically, even with no matches. Check the current Pricing tab; future announced prices are separate. A partial run is charged for startup and its saved jobs. ## Data fields - `source` (string) - `boardSlug` (string) - `id` (string) - `title` (string) - `department` (string) - `team` (string) - `location` (string) - `workplaceType` (string) - `employmentType` (string) - `isRemote` (boolean) - `isListed` (boolean) - `publishedAt` (string) - `jobUrl` (string) - `applyUrl` (string) - `descriptionPlain` (string) - `compensation` (object) - `boardUrl` (string) - `descriptionHtml` (string) - `secondaryLocations` (array) - `address` (object) - `sourceApiVersion` (string) - `collectedAt` (string) ## Input settings - `mode` (string): Use all for board snapshots or exact for hosted job URLs. - `boards` (array): Add 1–50 board slugs or HTTPS jobs.ashbyhq.com board URLs in all mode. Use canonical job URLs in exact mode. Repeated boards are fetched once. - `includeCompensation` (boolean): Ask Ashby's public endpoint for compensation fields when the employer publishes them. - `includeUnlisted` (boolean): All mode defaults to listed postings only. Exact mode may return a matching direct-only row. - `filters` (object): The Actor fetches each board before filtering. Different fields use AND; values in one field use OR. Empty arrays do not restrict results. Each list accepts up to 20 non-empty strings of 1–120 characters. - `maxResultsPerBoard` (integer): Optional limit on rows from each board. Applied after filters. - `maxOutputItems` (integer): Maximum saved job rows for the whole run, after filters and duplicates. API default: 11446. New-form prefill: 10. Check RUN_SUMMARY for stopped or incomplete work. - `concurrency` (integer): Maximum number of board requests sent at the same time. ## Step by step on Apify 1. Open Input. Keep the board `ramp` and the new-form limit of 10 jobs. 2. Choose `all` for board slugs or board URLs. Use `exact` only with canonical hosted job URLs. 3. Click Start. 4. Open the default Dataset. Check `title`, `location`, `jobUrl` and `applyUrl`. 5. Open Key-value store → RUN_SUMMARY to see counts, limits and each input's status. ## Use cases | Task | Input | Key fields | Next step | |---|---|---|---| | Export a company job board | `boards`, `mode: "all"` | `id`, `title`, `department`, `jobUrl` | Export the Dataset or store it in your system. | | Study roles and locations | `filters.titleContains`, `filters.locationContains` | `location`, `secondaryLocations`, `workplaceType` | Compare matching jobs. | | Read one known posting | `mode: "exact"`, a canonical job URL | `id`, descriptions, `applyUrl` | Check the current source posting. | | Compare published pay | `includeCompensation: true` | `compensation`, `employmentType` | Use only values the employer publishes. | ## Tips - Use the board name from the jobs.ashbyhq.com address. - Check workplace type and the remote flag together. They can differ. - Read RUN_SUMMARY when the result looks empty. ## Limits - Up to 50 input values and 11,446 saved jobs per run. - Default memory is 512 MB after the resource validation matrix; increase it for larger boards or high concurrency. Data caps and source deadlines do not change. - Each source response is limited to 64 MiB. - Each source request has a 30-second timeout and up to three attempts for transient failures. - Total source work has a 240-second deadline. A longer platform timeout does not extend it. - A shorter platform timeout reduces source time, with a 15-second reserve for the run summary. - There is no pagination: the documented endpoint returns a board feed in one response. - Source order is kept. This Actor does not sort jobs by publication date. ## Sample result ```json { "source": "ashby", "boardSlug": "ramp", "id": "34413f8d-26bf-4bbc-8ade-eb309a0e2245", "title": "Security Engineer, Cloud", "department": "Engineering", "team": "Backend", "location": "New York, NY (HQ)", "isRemote": true, "workplaceType": "Hybrid", "employmentType": "FullTime", "isListed": true, "publishedAt": "2026-04-07T17:12:35.753Z", "jobUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245", "applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application" } ``` ## Use it from code Actor ID: `cliqtomedia/ashby-jobs-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/ashby-jobs-scraper").call(run_input={ "mode": "all", "boards": [ "ramp" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~ashby-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"mode": "all", "boards": ["ramp"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/ashby-jobs-scraper") result = tool.invoke({"run_input": {"mode": "all", "boards": ["ramp"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Reach out when the company is ready](https://cliqtomedia.com/actors/use-cases/buying-signals/): Know when a company hires, raises money or wins a contract. Reach out at the right moment. ## Similar tools - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) - [BambooHR Jobs Monitor & Scraper](https://cliqtomedia.com/actors/bamboohr-jobs-monitor-scraper/) --- # Coles, Woolworths and Aldi Price Scraper for Australia > Coles Woolworths price scraper with Aldi too: current and was price, unit price, specials, stock and barcode in one table. Search by keyword. No login. URL: https://cliqtomedia.com/actors/au-supermarket-prices/ Category: E-commerce & prices · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/au-supermarket-prices?fpr=cliqto Search Coles, Woolworths and Aldi Australia at once and get one price table. Each row has the price, was price, unit price and specials. No store account needed. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `milk` in Search terms. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Get Coles, Woolworths and Aldi Australia prices in one table. Search by keyword, or paste category or product links. Each row has the price, was price, unit price, special and promo text, stock, brand, size and link. No login or API key. A 20-product Woolworths search costs $0.014 on the Free plan. - Search terms: each term is searched in every store you pick. - Category links: a category page from a store website, for example Coles milk. - Product links: one product page per link. ### Good for - Compare the price of the same product type in Coles, Woolworths and Aldi. - Watch specials and was prices for a list of products or a category. - Get unit prices (per litre, per kg, per 100 g) for fair comparison. - Build price history: schedule the same input and keep each run's rows. ### Not a good fit - Prices for one store branch or postcode, or delivery prices. - Nutrition facts, ingredients or product descriptions. They are not collected. - Other stores, such as IGA, or stores outside Australia. - Login, loyalty prices (Flybuys, Everyday Rewards) or carts. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.002 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Product saved | $0.00045 (from $0.00038 on paid Apify plans) | One product row saved to the dataset. | | Store page read | $0.003 | One search, category or product page read from Woolworths, Coles or Aldi, including a product link the store reports as not found. Blocked or failed requests are not charged. | - One product: about $0.0024. - 1,000 products: about $0.45. - Every day 100 products, for 30 days: about $1.41 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/au-supermarket-prices?fpr=cliqto ## Questions ### Are these my local store prices? No. Prices for one branch or postcode are not collected. ### Does it include loyalty prices? No. Flybuys and Everyday Rewards prices are not included. ### Does it cover IGA? No. Only Coles, Woolworths and Aldi Australia. ### Can I get nutrition facts? No. Nutrition, ingredients and descriptions are not collected. ### Do I need a store account or API key? No. The Actor reads public pages. You only need an Apify account. ### Can I get price history? Each run gives the current prices. Schedule the same input and keep the datasets to build your own history. ### Why is the same product in two rows? You searched for two terms and the product matched both. Each search keeps its own rows. Remove duplicates by `store` + `productId` if you need one row per product. ## Data fields - `store` (string): woolworths, coles or aldi. - `productId` (string): The store's own product ID (stockcode or SKU). - `name` (string): Product name as the store shows it. - `brand` (string): Brand, such as Big M. - `size` (string): Pack size, such as 3L or 800g. - `price` (number): Current price in AUD. - `wasPrice` (number): Price before the discount. Only when the product is on special. - `savings` (number): wasPrice minus price. - `unitPrice` (number): Price per comparison unit. - `unitOfMeasure` (string): Comparison unit, such as 1L, 1kg or 100g. - `unitPriceText` (string): Unit price as the store shows it, such as $1.65 / 1L. - `onSpecial` (boolean): true when the product is discounted or on a multi-buy offer. - `promoText` (string): Offer text, such as Save $0.45 or Pick any 3 for $7.50. - `category` (string): Store category, such as Dairy, Eggs & Fridge > Milk. - `inStock` (boolean): Online availability. Always null for Aldi, because Aldi does not sell online. - `isSponsored` (boolean): true for a paid (sponsored) position in search results. - `barcode` (string): GTIN barcode. Woolworths shows it; Coles and Aldi usually do not. - `url` (string): Product page link. - `image` (string): Product image link. - `currency` (string): Always AUD. - `sourceType` (string): search, category or product: the input that gave this row. - `query` (string): The search term, for search rows. - `sourceUrl` (string): The category or product link, for those rows. - `position` (integer): Place in the store's results (before the specials filter). - `fetchedAt` (string): Time the row was read, ISO UTC. ## Input settings - `searchTerms` (array): Products to search for, e.g. milk, coffee pods or Tim Tam. Each term is searched in every store picked below. Up to 50 terms. - `stores` (array): Supermarkets to search. Category and product URLs always go to the store they belong to. Default: all three. - `maxItems` (integer): How many products to save for each search term in each store, and for each category URL. Product URLs always return one product each. - `onlyOnSpecial` (boolean): Keep only products that are discounted or on a multi-buy offer. Applies to searches and categories, not to product URLs. Reads up to 25 store pages per search or category to find specials; each page read is charged. - `categoryUrls` (array): Category pages copied from the store website, e.g. https://www.coles.com.au/browse/dairy-eggs-fridge/milk, https://www.woolworths.com.au/shop/browse/dairy-eggs-fridge/milk or https://www.aldi.com.au/products/dairy-eggs-fridge/milk/k/1111111160. Coles https://www.coles.com.au/on-special also works. Up to 50. - `productUrls` (array): Product pages copied from the store website, e.g. https://www.woolworths.com.au/shop/productdetails/888140/... or https://www.coles.com.au/product/coles-full-cream-milk-3l-8150288. Up to 500. ## Step by step on Apify 1. Open the Input tab. 2. Keep Search terms as `milk` and Stores as `Woolworths` (the prefill). 3. Keep Max products per search or category at `20`. 4. Click Start. 5. Open the Prices view of the dataset. Check `store`, `name`, `price` and `unitPriceText`. ## Use cases | Task | Input | Key fields | Next step | |---|---|---|---| | Compare three supermarkets | `searchTerms` + all three `stores` | `store`, `price`, `unitPrice`, `unitOfMeasure` | Sort by `unitPrice` in a spreadsheet | | Track specials in a category | `categoryUrls` + `onlyOnSpecial: true` | `price`, `wasPrice`, `savings`, `promoText` | Schedule a daily run | | Watch a fixed product list | `productUrls` | `productId`, `price`, `onSpecial`, `inStock` | Compare rows from each run by `store` + `productId` | | Feed a price app or dashboard | Any mode | `name`, `brand`, `size`, `image`, `url` | Read the dataset by API | ## Tips - Sort by unit price for a fair comparison between pack sizes. - Use search terms when you can. Product links are slower, about 1 second each. - Schedule the same input daily to build your own price history. ## Limits Data comes from the public websites of Woolworths, Coles and Aldi Australia. Their website terms limit automated access and commercial use of their content. You are responsible for checking that your use of the data is allowed. This Actor is an independent tool. It is not made by or endorsed by Woolworths, Coles or Aldi. - Online prices. Prices are the default online prices of each store. Local store and postcode prices can differ. - Aldi. Aldi does not sell online, so `inStock` is always `null`. Aldi shows few specials on its website, so `wasPrice` and `promoText` are usually `null` and `onlyOnSpecial` often returns no Aldi rows. - Names. Each store writes names its own way. Coles adds the size after a bar, for example `Coles Full Cream Milk | 3L`; the size is also in `size`. - Coles product links. Coles finds a product by the number at the end of the link. If the name part of the link is wrong but the number exists, you get that product. - Sponsored results. Store search results can include paid positions. They are kept and marked with `isSponsored: true`. - Not complete. Store search decides which products match a term. The Actor does not promise every product of a store. - Changes. If a store changes its website, a run can fail with `SOURCE_ERROR` until the Actor is updated. ## Sample result ```json { "store": "coles", "productId": "3034279", "name": "Big M Banana Flavoured Milk | 600mL", "brand": "Big M", "size": "600mL", "price": 3.45, "wasPrice": 3.9, "savings": 0.45, "unitPrice": 5.75, "unitOfMeasure": "1L", "unitPriceText": "$5.75 / 1L", "onSpecial": true, "promoText": "Save $0.45", "category": "Dairy, Eggs & Fridge > Milk", "inStock": false, "isSponsored": false, "barcode": null, "url": "https://www.coles.com.au/product/big-m-banana-flavoured-milk-600ml-3034279", "image": "https://cdn.productimages.coles.com.au/productimages/3/3034279.jpg", "currency": "AUD", "sourceType": "search", "query": "milk", "sourceUrl": null, "position": 15, "fetchedAt": "2026-10-14T11:29:52.330Z" } ``` ## Use it from code Actor ID: `cliqtomedia/au-supermarket-prices` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/au-supermarket-prices").call(run_input={ "searchTerms": [ "milk" ], "stores": [ "woolworths" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~au-supermarket-prices/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"searchTerms": ["milk"], "stores": ["woolworths"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/au-supermarket-prices") result = tool.invoke({"run_input": {"searchTerms": ["milk"], "stores": ["woolworths"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/): Track prices and offers in shops and marketplaces. See changes before your customers do. ## Similar tools - [AliExpress Scraper: Products, Prices & Reviews, No Login](https://cliqtomedia.com/actors/aliexpress-scraper/) - [Idealo Price Scraper: All Shop Offers, 6 Countries, No Login](https://cliqtomedia.com/actors/idealo-price-scraper/) - [Naver Shopping Scraper: Korea Products & Prices](https://cliqtomedia.com/actors/naver-shopping-scraper/) - [Trendyol Scraper: Products, Prices & Reviews (No login)](https://cliqtomedia.com/actors/trendyol-scraper/) - [eBay Sold Listings Scraper - Sold Prices & Dates](https://cliqtomedia.com/actors/ebay-sold-listings/) - [Etsy Listings & Shop Export (Etsy Open API v3)](https://cliqtomedia.com/actors/etsy-listings-api/) --- # Audio and Podcast Transcriber > Podcast transcriber: turn MP3, M4A, WAV or MP4 links or a podcast RSS feed into text with timestamps and SRT or VTT subtitles. No OpenAI key needed. URL: https://cliqtomedia.com/actors/audio-video-transcriber/ Category: Video, audio & streaming · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/audio-video-transcriber?fpr=cliqto Turn audio files or podcast episodes into text. You get timestamps and SRT or VTT subtitles if you want them. No OpenAI key is needed. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `["https://www.archive.org/download/aesop_fables_volume_three…` in Audio or video file URLs. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Podcast and audio transcription with timestamps. Add direct links to MP3, M4A, WAV, OGG, Opus or MP4 files, or a podcast RSS feed, and get the text, plus SRT or VTT subtitles if you want them. - Input: direct media links (`audioUrls`), or a podcast RSS feed or Apple Podcasts show link (`podcastRssUrl`). - Output: the transcript text, timed segments `{start, end, text}`, SRT or WebVTT subtitles, the detected language and the episode details from the feed. - Languages: Whisper detects the spoken language. You can also choose it, or translate the speech to English. - Privacy: the audio is processed inside the run and is not saved to storage. ### Good for - Transcribe the newest episodes of a podcast from its RSS feed. - Make SRT or VTT subtitles for a video file you host. - Turn interviews, lectures and voice notes into searchable text for notes, search or an AI pipeline. ### Not a good fit - No downloads from YouTube, TikTok, Spotify, Instagram or other page links. The link must point straight to a media file (the URL usually ends with `.mp3`, `.m4a`, `.wav`, `.ogg`, `.mp4` and so on). - No speaker labels (who said what). There is one text stream per file. - Live streams are not supported. - Whisper can misspell names and rare words. Check important quotes against the audio. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.01 | Charged once per run, one fee per GB of memory. This tool uses 2 GB by default, so $0.02 per run. | | Transcribed minute (tiny/base) | $0.0098 (from $0.0083 on paid Apify plans) | One started minute of audio transcribed with the tiny or base model, counted per file. Broken links, missing files, web pages and skipped files are not charged. | | Transcribed minute (small model) | $0.032 (from $0.028 on paid Apify plans) | One started minute of audio transcribed with the more accurate small model, counted per file. Broken links, missing files, web pages and skipped files are not charged. | - One minute of audio: about $0.03. - 1,000 minutes of audio: about $9.82. - Every day 100 minutes of audio, for 30 days: about $30.00 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/audio-video-transcriber?fpr=cliqto ## Questions ### Can I paste a YouTube or Spotify link? No. The link must point straight to a media file, like an .mp3 or .mp4. For page links, use our Video URL to Text tool. ### Does it know who is speaking? No. There are no speaker labels. ### Are my files stored? No. The file is transcribed and deleted. Only the text is saved. ### How long can a file be? Up to 180 minutes and 1.5 GB per file. ### Do I need an OpenAI or other API key? No. The Whisper model runs inside the Actor. You only pay the Apify events above. ### Which languages work? Whisper supports about 100 languages. We tested English and Spanish. Quality is best for English and other widely spoken languages; `small` helps for others. ## Data fields - `sourceUrl` (string): Media file URL (as given, or the RSS enclosure URL). - `sourceType` (string): url (from audioUrls), rss_episode (feed episode) or rss_feed (feed-level error row). - `podcastTitle` (string): Podcast name from the RSS feed. - `title` (string): Episode title from the RSS feed. - `publishedAt` (string): Episode publish date from the feed, ISO 8601 UTC. - `episodeGuid` (string): Episode GUID from the feed. - `episodeUrl` (string): Episode web page link from the feed. - `status` (string): complete (whole file), partial (only the first part was transcribed: duration limit, spending cap, time budget or an interrupted download), not_found (HTTP 404/410, feed without audio episodes) or error (see the error field). - `durationSec` (number): Media duration in seconds when known. - `transcribedSec` (number): Seconds of audio transcribed; charged minutes are this value rounded up to whole minutes. - `truncated` (boolean): true when only the first part of the file was transcribed. - `language` (string): Language code used (detected or chosen). - `languageProbability` (number): Confidence of language detection, 0–1. - `task` (string): transcribe or translate. - `model` (string): Whisper model used: tiny, base or small. - `text` (string): Full transcript text. - `wordCount` (integer): Words in text. - `segments` (array): Timed segments {start, end, text} in seconds; null when outputFormat is text. - `subtitles` (string): SRT or WebVTT file content when outputFormat is srt or vtt. - `chargedMinutes` (integer): Minutes charged for this file (0 on errors). - `processingSec` (number): Download, decode and transcription time in seconds. - `error` (object): {code, message}: e.g. NOT_FOUND, UNSUPPORTED_SOURCE, NOT_MEDIA, NO_AUDIO, FILE_TOO_LARGE, DOWNLOAD_TIMEOUT, TOO_SLOW, INVALID_FEED, TRUNCATED (partial), CHARGE_LIMIT, RUN_TIME_LIMIT, ABORTED and SKIPPED_SLOW_SOURCES (file skipped, not charged); null when none. - `fetchedAt` (string): When the row was produced, ISO 8601 UTC. ## Input settings - `audioUrls` (array): Up to 100 public http(s) links straight to a media file: MP3, M4A, WAV, OGG, Opus, MP4 and other common audio and video formats. Page links from YouTube, TikTok, Spotify, Instagram and similar sites are not supported. No login, cookies or private networks; duplicates are processed once. - `podcastRssUrl` (string): Optional. A podcast RSS feed URL, or an Apple Podcasts show link (podcasts.apple.com/.../id123). The newest episodes are transcribed, up to Max episodes. - `maxEpisodes` (integer): How many of the newest feed episodes to transcribe. Used only with a podcast RSS feed. - `model` (string): Whisper model size. tiny and base share one price per minute; small is charged at a higher price per minute. - `language` (string): Spoken language. Detect automatically uses the first 30 seconds; pick the language when you know it for better results. - `outputFormat` (string): Every row has the full text. segments adds a list of {start, end, text}; srt or vtt adds a ready subtitle file in the subtitles field. - `translateToEnglish` (boolean): Return an English translation instead of a transcript in the original language (Whisper translate task). - `maxDurationMinutes` (integer): Only the first N minutes of each file are transcribed and charged; longer files return status partial. Up to 180. ## Step by step on Apify 1. Open the Input tab. 2. In Audio or video URLs (`audioUrls`), keep the example LibriVox file or paste your own direct media link. 3. Keep the defaults: model `base` and output `segments`. 4. Click Start. 5. Open the Transcripts view in the Output tab and read the `text` column. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Podcast show notes and search | `podcastRssUrl` + `maxEpisodes` | one row per episode | `title`, `publishedAt`, `text`, `segments` | send `text` to a summary or search tool | | Subtitles for your video | `audioUrls` + `outputFormat: srt` | one row per file | `subtitles`, `language` | save `subtitles` as a `.srt` file | | Meeting or interview notes | `audioUrls` | one row per file | `text`, `wordCount`, `durationSec` | paste `text` into notes or an AI agent | | English version of foreign audio | `audioUrls` + `translateToEnglish` | one row per file | `text`, `language`, `task` | read or index the English text | ## Tips - Use the podcast RSS feed to get the newest episodes in one go. - Put many files in one run to share the start fee. - Turn on translate to get English text from other languages. ## Limits - Up to 180 minutes per file (`maxDurationMinutes`), up to 100 links and 50 feed episodes per run. - Files up to 1.5 GB. - The default run timeout is 3600 seconds. A 3-hour file with `base` at 2048 MB takes about 38 minutes. For several long files, raise the timeout or the memory. - When the run timeout comes near, the current file is saved as `partial` and the remaining files get `RUN_TIME_LIMIT`. - Partial and failed rows are never charged for audio that was not transcribed. A `partial` row is charged only for the minutes in its `text`. ## Sample result ```json { "sourceUrl": "https://www.archive.org/download/aesop_fables_volume_three_librivox/fables_03_01_aesop_64kb.mp3", "sourceType": "url", "podcastTitle": null, "title": null, "publishedAt": null, "episodeGuid": null, "episodeUrl": null, "status": "complete", "durationSec": 77.95, "transcribedSec": 77.95, "truncated": false, "language": "en", "languageProbability": 0.991, "task": "transcribe", "model": "base", "text": "This is a LibraVox recording. All LibraVox recordings are in the public domain. …", "wordCount": 161, "segments": [ {"start": 0.75, "end": 3.65, "text": "This is a LibraVox recording."}, {"start": 3.65, "end": 6.97, "text": "All LibraVox recordings are in the public domain."} ], "subtitles": null, "chargedMinutes": 2, "processingSec": 7.9, "error": null, "fetchedAt": "2026-10-13T14:43:36Z" } ``` ## Use it from code Actor ID: `cliqtomedia/audio-video-transcriber` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/audio-video-transcriber").call(run_input={ "audioUrls": "[\"https://www.archive.org/download/aesop_fables_volume_three_librivox/fables_03_01_aeso…", "maxEpisodes": 3 }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~audio-video-transcriber/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"audioUrls": "[\"https://www.archive.org/download/aesop_fables_volume_three_librivox/fables_03_01_aeso…", "maxEpisodes": 3}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/audio-video-transcriber") result = tool.invoke({"run_input": {"audioUrls": "[\"https://www.archive.org/download/aesop_fables_volume_three_librivox/fables_03_01_aeso…", "maxEpisodes": 3}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [One piece of content, ten new posts](https://cliqtomedia.com/actors/use-cases/content-repurposing/): Turn videos, podcasts, PDFs and articles into clean text. Make posts, notes and AI drafts from it. ## Similar tools - [YouTube Subtitles & Transcript Scraper API](https://cliqtomedia.com/actors/youtube-transcript-scraper/) - [Apple Podcast Directory & RSS Contacts Scraper](https://cliqtomedia.com/actors/podcast-directory-rss-contacts-scraper/) - [YouTube Comments Scraper](https://cliqtomedia.com/actors/youtube-comments-scraper/) - [Social Video Downloader: TikTok, Instagram, X - No Login](https://cliqtomedia.com/actors/social-video-downloader/) - [YouTube Search Results Scraper — No Login](https://cliqtomedia.com/actors/youtube-search-scraper/) - [Kick Live Streams & Viewer Count (Official API), No Login](https://cliqtomedia.com/actors/kick-channels/) --- # BambooHR Jobs Monitor and Scraper > BambooHR jobs scraper for public career boards: job text, pay, location and apply links. Compare snapshots to find new, changed and removed jobs. URL: https://cliqtomedia.com/actors/bamboohr-jobs-monitor-scraper/ Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/bamboohr-jobs-monitor-scraper?fpr=cliqto Add a BambooHR board name. You get its public jobs with text, pay and apply links. Give a past snapshot to see new, changed and removed jobs. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `nycballet` in BambooHR boards. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Read public BambooHR vacancies from company career boards. Get job text, pay, locations and application links. Use a previous complete snapshot to see new, changed and removed jobs. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.06 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Job or change saved | $0.0016 | One unique job or change saved in the default Dataset. Unchanged jobs are not saved in monitor mode. | - One job: about $0.06. - 1,000 jobs: about $1.66. - Every day 100 jobs, for 30 days: about $6.60 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/bamboohr-jobs-monitor-scraper?fpr=cliqto ## Questions ### Do I need a BambooHR login? No. It reads public vacancies only. ### Can I get salary as numbers? No. Pay text is kept as the employer wrote it. ### Do custom career domains work? No. Only boards on bamboohr.com are supported. ### How many boards per run? Up to 3 boards per run. ### Can I get numeric salary ranges? This version preserves the compensation text. Numeric salary fields are null because the source returns free text. ### Can I paste a full job URL? Yes, a supported HTTPS BambooHR URL selects that whole board. It is not a single-job input. Add a title filter if needed. ### Can I use a snapshot from another scraper? No. Use a complete SNAPSHOT from this Actor and the same scope. The ID contains the board to avoid job ID collisions across employers. ## Data fields - `schemaVersion` (string) - `id` (string) - `source` (string) - `market` (string) - `sourceJobId` (string) - `url` (string) - `title` (string) - `company` (object) - `advertiser` (object) - `location` (object) - `workArrangement` (string) - `employmentTypes` (array) - `salary` (object) - `classifications` (array) - `teaser` (string) - `bulletPoints` (array) - `postedAt` (string) - `updatedAt` (string) - `expiresAt` (string) - `isPromoted` (boolean) - `description` (object) - `changeType` (string) - `firstSeenAt` (string) - `board` (string) - `department` (string) - `employmentStatus` (string) - `compensation` (string) - `datePosted` (string) - `minimumExperience` (string) - `status` (string) - `detailStatus` (string) - `contentHash` (string) - `scrapedAt` (string) ## Input settings - `boards` (array, required): Add 1–3 company slugs or public HTTPS BambooHR URLs. Duplicate boards are read once. Start with nycballet. - `maxResults` (integer): Save 1–44 rows. Default 44. A smaller value limits output after scanning and makes a truncated run partial. Keep 44 for a complete monitor snapshot. - `includeDescription` (boolean): Default on. Details are always read for country, pay and posted date. Off returns null description text and HTML; it does not reduce requests. - `previousSnapshot` (object): Optional: paste the full SNAPSHOT object from the last complete run with the same boards and filters. Then only NEW, CHANGED and REMOVED jobs are saved. No default. Do not use a partial snapshot. - `keywords` (array): Optional text contained in title, ignoring case. Any entry can match. All filter groups must match. Default empty, max 10 entries of 1–80 characters. Filters do not reduce full scan cost. - `locations` (array): Optional text contained in city, region, country or remote/hybrid/on_site, ignoring case. Any entry can match. All filter groups must match. Default empty, max 10 entries of 1–80 characters. Filters do not reduce full scan cost. - `departments` (array): Optional text contained in department, ignoring case. Any entry can match. All filter groups must match. Default empty, max 10 entries of 1–80 characters. Filters do not reduce full scan cost. ## Step by step on Apify 1. Open Input. 2. Add `nycballet` to BambooHR boards (`boards`). 3. Keep `maxResults: 44` and `includeDescription: true`. 4. Use 256 MB memory and a 150-second timeout. Click Start. 5. Open the Dataset. Check `title`, `compensation`, `location.country` and `url`. 6. Open `RUN_SUMMARY` in the Key-value store. Check `status: complete`. ## Use cases | Goal | Input | Key fields | |---|---|---| | Keep a company job feed | boards | id, title, department, url | | Review hiring by location | boards, locations | location, employmentStatus, compensation | | Track hiring changes | boards, previousSnapshot | changeType, id, contentHash, firstSeenAt | ## Tips - Use the company.bamboohr.com name. A main website URL is not enough. - Save a complete snapshot. Removed jobs are shown only after a complete scan. - Check RUN_SUMMARY even when the run says succeeded. ## Limits - Public BambooHR company boards only. Custom domains and private jobs are not supported. - Up to 3 board inputs, 44 jobs with details, and 44 saved rows per run. The checked maximum was 44 current jobs from 3 boards. This is not a claim of 1000-row capacity. - Use 256 or 512 MB and a finite positive timeout. A 300-second Store test or larger outer timeout is supported without extending the internal source deadline. Defaults are 256 MB and 150 seconds. Restarts and resurrected runs are rejected. - Source work has a 120-second deadline, 150 request attempts, a 2 MiB response limit and a 16 MiB total response-body limit. Requests are sequential, at least one second apart. Temporary failures have up to two retries. - The source is a public web endpoint, not a guaranteed official API. Source changes, access blocks and temporary errors can stop a scan. - `complete`: full valid scan, including a valid zero-job board. `partial`: some data exists but a board, detail, output cap or source limit prevented completeness. `not_found`: all requested boards were confirmed missing. `error`: invalid input or technical failure without a successful board. - A detail failure keeps the list fields in a partial row; country, pay, date and text may be missing. A source error never means a successful zero-job scan. - Check RUN_SUMMARY even when the platform reports SUCCEEDED. Partial runs may finish with that platform status. An error outcome exits with a failure code. ## Sample result ```json { "schemaVersion": "bamboohr.job.v1", "id": "bamboohr:nycballet:160", "source": "bamboohr", "market": "global", "sourceJobId": "160", "url": "https://nycballet.bamboohr.com/careers/160", "title": "Chief Technology Officer (CTO)", "company": { "name": "nycballet", "sourceCompanyId": "nycballet", "url": "https://nycballet.bamboohr.com/careers" }, "advertiser": { "name": "nycballet", "sourceAdvertiserId": "nycballet" }, "location": { "raw": "New York, New York", "suburb": null, "city": "New York", "region": "New York", "postcode": "10023", "country": "US" }, "workArrangement": "hybrid", "employmentTypes": [ "full_time" ], "salary": { "raw": "$220K - $240K", "min": null, "max": null, "currency": null, "period": null, "includesSuper": null }, "classifications": [ { "category": "Information Technology", "subcategory": null } ], "teaser": null, "bulletPoints": [], "postedAt": "2026-03-30T00:00:00.000Z", "updatedAt": null, "expiresAt": null, "isPromoted": false, "description": { "text": "New York City Ballet is one of the foremost dance companies in the world, with a roster of spectacular dancers and an unparalleled repertory. Founded in 1948 by George Balanchine and Lincoln Kirstein, New York City Ballet quickly became world-renowned for its athletic and contemporary style. Widely acknowledged for its enduring contributions to dance, New York City Ballet is committed to promoting creative excellence and nurturing a new generation of dancers and choreographers. The School of American Ballet is the official training academy of the New York City Ballet.\n\n \n\nPosition Summary\n\nReporting to the Chief Financial Officer (CFO), the Chief Technology Officer (CTO) provides strategic leadership, vision, and management of all technology initiatives across the organization. The CTO ensures that technology systems, data practices, and digital infrastructure advance the institution’s mission, organizational efficiency, and long‑term sustainability. This role partners closely with all divisions of the organization to support key operational functions, including database management for fundraising, donor engagement, and ticket sales, in addition to audit and compliance reporting. The CTO leads a seven-person technology department, including supervision of the Director of Technology Infrastructure.\n\n\n\n\n\nKey Responsibilities:\n\nStrategic Leadership & Planning\n\n * Provide thought leadership on digital transformation, data governance, cybersecurity, and emerging technologies relevant to nonprofits and cultural institutions.\n * Work with the executive team to ensure technology supports growth and innovation.\n\nTechnology Operations & Infrastructure\n\n * Oversee the maintenance, security, and performance of all IT systems, networks, and hardware to ensure reliability across the entire organization.\n * Lead enterprise-wide upgrades, cloud migrations, and modernization efforts to improve efficiency and reduce technical debt.\n * Establish and enforce cybersecurity protocols, data protection policies, disaster recovery planning, and compliance with relevant regulations (e.g., PCI‑DSS for ticketing and donations, NY privacy laws).\n\nTeam Leadership & Project Management\n\n * Manage, mentor, and develop the IT department, building a strong service-oriented culture with clear priorities and accountability.\n * Create project management structures to ensure timely and successful delivery of technology initiatives.\n * Foster cross-departmental collaboration and build strong working relationships with internal stakeholders.\n\nFundraising & Ticketing Systems\n\n * Oversee technology platforms that support fundraising, ticket sales, membership, and donor stewardship (e.g., CRM, ticketing platforms, payment processing).\n * Ensure seamless integration and data flow between systems used by Development, Finance, and Marketing.\n * Partner with leadership to optimize donor data practices, reporting, segmentation, and digital fundraising capabilities.\n\nDigital Engagement & Innovation\n\n * Support digital initiatives such as online ticketing, web platforms, mobile experiences, virtual programming, and digital accessibility tools.\n * Identify opportunities to enhance patron engagement and improve the customer journey through technology.\n * Stay current with trends in digital user experience, cultural institution technology, and nonprofit enterprise tools.\n\nVendor & Budget Management\n\n * Manage relationships with external vendors, consultants, and managed service providers.\n * Develop and oversee the IT budget, ensuring cost‑effective decision‑making and transparency.\n * Negotiate contracts, service-level agreements, and technology purchases.\n\n\n\n\n\nQualifications:\n\n * Ten (10) years of progressive leadership experience in IT, including at least 8 years managing diverse teams.\n * Bachelor’s degree required, advanced degree in computer science, information systems, cybersecurity, or a related field preferred.\n * Strategic thinker with the ability to simplify complexity and make informed decisions.\n * Comfortable navigating change and leading teams through growth and transformation.\n * Excellent communication skills and a collaborative approach to leadership; with the ability to balance strategic vision with hands-on operational management.\n * Experience in nonprofit, cultural, or mission-driven organizations strongly preferred.\n * Demonstrated success overseeing enterprise systems in multi-department organizations of similar size.\n * Expertise in CRM and ticketing systems (e.g., Tessitura, Salesforce, Blackbaud, or equivalent).\n * Strong background in IT operations, cloud environments, data governance, cybersecurity, and digital transformation.\n * Deep understanding of cybersecurity frameworks, standards, and best practices; Demonstrated ability to design and implement cybersecurity policies, training programs, and risk‑mitigation strategies.\n * Experience with threat detection, vulnerability management, and incident response planning.\n * Knowledge of identity and access management (IAM), multi-factor authentication, and endpoint security.\n * Hands-on experience with security monitoring tools, SIEM solutions, encryption, and network security architecture.\n * Familiarity with compliance requirements including PCI‑DSS, data privacy laws, and safeguarding payment and donor information.\n * Empathetic leader who builds trust and fosters inclusivity.\n\n \n\nOther Duties:\n\nPlease note that this job description is not designed to cover or contain a comprehensive list of activities, duties or responsibilities that are required of the employee for this job. Duties, responsibilities and activities may change at any time with or without notice.\n\n \n\nEEO Statement\n\nNew York City Ballet is proud to be an equal opportunity employer committed to diversity and inclusion in all aspects of recruiting and employment. All qualified individuals are encouraged to apply and will receive consideration without regard to race, color, religion, age, national origin, sex, sexual orientation, gender identity or expression, marital status, citizenship status, disability, pregnancy, creed, genetic predisposition or carrier status, military status or veteran status, status as a victim of domestic violence, unemployment status, familial status, sexual violence or stalking victim status, caregiver status, arrest or conviction record to the extent required by applicable law, credit history or any other characteristic protected by law.\n\n \n\nOur Commitment to Diversity, Equity, and Inclusion\n\nNew York City Ballet, one of the foremost ballet companies in the world, pursues the highest levels of artistic excellence and innovation. Therefore, we seek to attract, retain, and cultivate the most talented dancers, musicians, designers, stage technicians, and arts administrators. To this end, we are deeply committed to creating and sustaining an organizational culture that values and reflects inclusion, equity and access for all.  We are inspired by our founders, George Balanchine and Lincoln Kirstein, who envisioned an authentically American expression of ballet with a company that reflects the rich cultural diversity of this nation. In pursuit of their vision, we are committed to all by educating, developing, and supporting an organization that welcomes and amplifies the voices and lived experiences of everyone.      ", "html": "

New York City Ballet is one of the foremost dance companies in the world, with a roster of spectacular dancers and an unparalleled repertory. Founded in 1948 by George Balanchine and Lincoln Kirstein, New York City Ballet quickly became world-renowned for its athletic and contemporary style. Widely acknowledged for its enduring contributions to dance, New York City Ballet is committed to promoting creative excellence and nurturing a new generation of dancers and choreographers. The School of American Ballet is the official training academy of the New York City Ballet.

\n

 

\n

Position Summary

\n

Reporting to the Chief Financial Officer (CFO), the Chief Technology Officer (CTO) provides strategic leadership, vision, and management of all technology initiatives across the organization. The CTO ensures that technology systems, data practices, and digital infrastructure advance the institution’s mission, organizational efficiency, and long‑term sustainability. This role partners closely with all divisions of the organization to support key operational functions, including database management for fundraising, donor engagement, and ticket sales, in addition to audit and compliance reporting. The CTO leads a seven-person technology department, including supervision of the Director of Technology Infrastructure.

\n


\n

Key Responsibilities:

\n

Strategic Leadership & Planning

\n\n

Technology Operations & Infrastructure

\n\n

Team Leadership & Project Management

\n\n

Fundraising & Ticketing Systems

\n\n

Digital Engagement & Innovation

\n\n

Vendor & Budget Management

\n\n



\n

Qualifications:

\n\n

 

\n

Other Duties:

\n

Please note that this job description is not designed to cover or contain a comprehensive list of activities, duties or responsibilities that are required of the employee for this job. Duties, responsibilities and activities may change at any time with or without notice.

\n

 

\n

EEO Statement

\n

New York City Ballet is proud to be an equal opportunity employer committed to diversity and inclusion in all aspects of recruiting and employment. All qualified individuals are encouraged to apply and will receive consideration without regard to race, color, religion, age, national origin, sex, sexual orientation, gender identity or expression, marital status, citizenship status, disability, pregnancy, creed, genetic predisposition or carrier status, military status or veteran status, status as a victim of domestic violence, unemployment status, familial status, sexual violence or stalking victim status, caregiver status, arrest or conviction record to the extent required by applicable law, credit history or any other characteristic protected by law.

\n

 

\n

Our Commitment to Diversity, Equity, and Inclusion

\n

New York City Ballet, one of the foremost ballet companies in the world, pursues the highest levels of artistic excellence and innovation. Therefore, we seek to attract, retain, and cultivate the most talented dancers, musicians, designers, stage technicians, and arts administrators. To this end, we are deeply committed to creating and sustaining an organizational culture that values and reflects inclusion, equity and access for all.  We are inspired by our founders, George Balanchine and Lincoln Kirstein, who envisioned an authentically American expression of ballet with a company that reflects the rich cultural diversity of this nation. In pursuit of their vision, we are committed to all by educating, developing, and supporting an organization that welcomes and amplifies the voices and lived experiences of everyone.      

", "contactsRedacted": true }, "changeType": null, "firstSeenAt": "2026-10-03T16:40:54.050Z", "board": "nycballet", "department": "Information Technology", "employmentStatus": "Full-Time", "compensation": "$220K - $240K" } ``` ## Use it from code Actor ID: `cliqtomedia/bamboohr-jobs-monitor-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/bamboohr-jobs-monitor-scraper").call(run_input={ "boards": [ "nycballet" ], "maxResults": 44 }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~bamboohr-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"boards": ["nycballet"], "maxResults": 44}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/bamboohr-jobs-monitor-scraper") result = tool.invoke({"run_input": {"boards": ["nycballet"], "maxResults": 44}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) --- # Bilibili Scraper: Videos, Comments and Creators > Bilibili scraper: get video stats, up to 2,000 comments per video and creator profiles. Views, likes, coins and danmaku count. No login needed. URL: https://cliqtomedia.com/actors/bilibili-scraper/ Category: Social media & communities · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/bilibili-scraper?fpr=cliqto Get public Bilibili data in clean rows. Search videos, read video stats, collect comments or check creators. No Bilibili account is needed. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `AI` in Search keywords. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Scrape public Bilibili data with no login. Search videos by keyword, get full stats for video links, collect up to 2,000 root comments per video, or read creator profiles and their latest videos. Each item is one clean row with views, likes, coins, favorites, danmaku, tags and more. A typical run with 20 rows takes about 5 seconds and costs $0.062 on the Free plan. ### Data you get - Videos: BV ID, av ID, title, URL, description, cover image, duration, publish time, author name and ID, views, likes, coins, favorites, shares, danmaku count, comment count, tags and category. - Comments: comment ID, text, likes, reply count, user name, user ID, user level, created time, pinned flag and the video it belongs to. - Creators: user ID, name, profile URL, public bio, level, followers, following, video count, total likes, official title and avatar URL. - Status: one free row that lists inputs that were not found, invalid, duplicate or failed, with a reason for each. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.006 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Data row | $0.0028 (from $0.0024 on paid Apify plans) | Charged for each saved video, comment or creator row. The status row is free. | - One row: about $0.0088. - 1,000 rows: about $2.81. - Every day 100 rows, for 30 days: about $8.58 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/bilibili-scraper?fpr=cliqto ## Questions ### Can I get replies to comments? No. You get root comments and the danmaku count only. ### Why do I get fewer search results than I asked for? Bilibili had fewer results, or it reached its limit of 1,000 results. ### Do I need to add my cookies? No. The tool uses public guest access. Please do not add cookies. ### Do I need a Bilibili account or cookies? No. The Actor uses public guest access. Do not add your cookies. ### Are BV and av IDs both supported? Yes. `BV1xx411c7mD`, `av2` and the full link point to the same video, and the Actor saves and charges it once. ### Why did a search return fewer rows than `maxItems`? Bilibili had fewer results for that keyword, or it reached its limit of 1,000 results. ### Is the data the same as on the website? Yes, it comes from the same public data. Counters change quickly, so values can differ a little minutes later. ## Input settings - `mode` (string, required): search: videos for keywords. video: details for video links. comments: root comments of videos. user: creator profiles and their latest videos. - `keywords` (array): Used in search mode. Up to 20 keywords, Chinese or English. Bilibili serves at most 1,000 results per keyword. - `videoUrls` (array): Used in video and comments modes. Up to 50 entries in video mode and 25 in comments mode: https://www.bilibili.com/video/BV…, BV1xx411c7mD, av170001 or 170001. Short b23.tv links are not supported. - `userIds` (array): Used in user mode. Up to 50 numeric user IDs (mid) or https://space.bilibili.com/ links. - `maxItems` (integer): Search: videos per keyword (up to 1,000). Comments: comments per video (up to 2,000). User: videos per creator, plus one profile row (up to 1,000). Not used in video mode. - `searchOrder` (string): Search mode only. - `commentSort` (string): Comments mode only. Hot puts the most liked first (pinned comments are included); newest lists by time. - `includeFullStats` (boolean): Search and user modes: opens each video page to add coins and shares (search) or likes, coins, favorites, shares, danmaku and comment counts (user lists carry only views). One extra request per video, so runs are slower. Tags come with search results and video mode. Video mode always has full stats. - `includeUserVideos` (boolean): User mode: also list the creator's latest public videos (up to Max items). - `proxyConfiguration` (object): Apify Proxy datacenter IPs work for Bilibili. Change only if you see blocks. ## Step by step on Apify 1. Open Input. 2. Keep What to scrape as `search`, Search keywords as `AI` and Max items as `20`. 3. Click Start. 4. Open the Videos tab of the Output to see the rows. Open Run summary to check each input. ## Use cases | Task | Input | Key fields | Next step | |---|---|---|---| | Track a topic on Bilibili | `search`, several `keywords`, `pubdate` | `title`, `views`, `publishedAt`, `tags` | Compare topics by views and dates. | | Compare video performance | `video` with a list of links | `views`, `likes`, `coins`, `favorites`, `danmaku` | Rank videos by engagement. | | Study audience opinion | `comments`, `hot`, `maxItems: 1000` | `text`, `likes`, `createdAt` | Run sentiment or keyword analysis. | | Research creators | `user` with creator IDs | `followers`, `videoCount`, `totalLikes`, videos | Build a creator shortlist. | ## Tips - Pick one mode per run: search, videos, comments or creators. - BV and av IDs both work; duplicates are counted once. - Send comment text to a translation or sentiment tool. ## Limits - Field names are this Actor's own (`views`, `likes`, `danmaku`…). They are not a drop-in copy of other Bilibili scrapers' output. - Bilibili search serves at most 1,000 results per keyword. Some keywords return fewer; the run summary warns about it. - A creator's public video list can be shorter than `videoCount`, because Bilibili hides some videos. - Comments mode collects root comments only. Replies are counted in `replyCount` but not collected. Danmaku text is not collected. - Bilibili sometimes refuses requests from cloud IPs (HTTP 412). Creator video lists are refused more often than other pages. The Actor retries on a new proxy session up to 6 times within about one minute and keeps going after a single refused input. Two refused inputs in a row stop the run as a partial `SOURCE_ERROR` with all saved rows kept. - The Actor waits 0.5 s between requests to stay polite. Large creator lists and comment runs take longer than search. - Counters change all the time. Keep `fetchedAt` with your data. - Short `b23.tv` links are not resolved. Open them in a browser and copy the full video link. ## Sample result ```json { "type": "video", "bvid": "BV1Lzpr6TELC", "aid": 117437089450751, "url": "https://www.bilibili.com/video/BV1Lzpr6TELC", "title": "AI自制打针情景短片《母女打针》第二天", "description": "视频已做合理化删减", "thumbnailUrl": "https://i1.hdslb.com/bfs/archive/07188a8bef3c3146aaa5b3ea2b37186058221df4.jpg", "durationSec": 321, "publishedAt": "2026-10-14T03:23:59.000Z", "authorMid": 113904740, "authorName": "西瓜智造BOB", "views": 2975, "likes": 81, "coins": null, "favorites": 153, "shares": null, "danmaku": 4, "comments": 27, "tags": ["影视剪辑", "娱乐观察局", "AI", "剧情向", "电视剧", "国产", "情景", "医生", "母女", "短片"], "category": "小剧场", "source": "search", "fullStats": false, "input": "AI", "searchKeyword": "AI", "searchRank": 1, "fetchedAt": "2026-10-14T13:03:47.027Z" } ``` ## Use it from code Actor ID: `cliqtomedia/bilibili-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/bilibili-scraper").call(run_input={ "mode": "search", "keywords": [ "AI" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~bilibili-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"mode": "search", "keywords": ["AI"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/bilibili-scraper") result = tool.invoke({"run_input": {"mode": "search", "keywords": ["AI"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Hear what people say about you](https://cliqtomedia.com/actors/use-cases/social-listening/): Find what people say about your brand and your topic on Bluesky, Hacker News, YouTube and more. ## Similar tools - [YouTube Comments Scraper](https://cliqtomedia.com/actors/youtube-comments-scraper/) - [YouTube Subtitles & Transcript Scraper API](https://cliqtomedia.com/actors/youtube-transcript-scraper/) - [Bluesky Scraper — Posts, Profiles, Feeds & Threads, No Login](https://cliqtomedia.com/actors/bluesky-scraper/) - [Substack Newsletter Scraper](https://cliqtomedia.com/actors/substack-newsletter-scraper/) - [Hacker News Stories & Comments Scraper](https://cliqtomedia.com/actors/hacker-news-stories-comments-scraper/) - [Medium Article Scraper: Tags, Authors & Publications](https://cliqtomedia.com/actors/medium-articles-scraper/) --- # Bluesky Scraper: Posts, Profiles, Feeds and Threads > Bluesky scraper: search posts, get account posts, profiles, reply threads and custom feeds as clean JSON. Likes, reposts and links. No login needed. URL: https://cliqtomedia.com/actors/bluesky-scraper/ Category: Social media & communities · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/bluesky-scraper?fpr=cliqto Get public Bluesky posts, profiles, threads and feeds as clean rows. You need no account and no app password. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `apify` in Search queries (mode: Search posts). Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Scrape public Bluesky posts, profiles, custom feeds, lists and reply threads with no login, and get clean JSON rows with text, engagement counts, links, mentions, hashtags, image alt text, quoted posts and author details. ### Good for - Track what people post about a brand, product, hashtag or domain on Bluesky. - Collect the posts and profiles of a list of accounts for research or lead lists. - Pull a full reply thread for sentiment or discussion analysis. - Feed clean, typed Bluesky rows into an AI agent, a spreadsheet or a database. ### Not a good fit - No private data: no DMs, no muted or blocked lists, nothing that needs login. - No followers or following lists in this version. - Search returns at most 100 posts per query, because Bluesky blocks further search pages without login. The Actor does not try to get around this. - Counts (likes, reposts, followers) are a snapshot at fetch time. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.001 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Post | $0.0009 (from $0.00055 on paid Apify plans) | One Bluesky post row saved to the Dataset (search, account posts, thread or feed). | | Profile | $0.0027 (from $0.0016 on paid Apify plans) | One Bluesky profile row saved to the Dataset. | | Empty result | $0.0005 | One input value that returned no data: a search or account with no matching posts, or a profile, post, feed or list that does not exist or cannot be read. | - One post: about $0.0019. - 1,000 posts: about $0.90. - Every day 100 posts, for 30 days: about $2.73 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/bluesky-scraper?fpr=cliqto ## Questions ### Why do I get only 100 posts per search? Bluesky shows more search pages only to logged-in users. The tool respects that limit. ### Can I get a follower list? Not in this version. You get the follower count in profile rows. ### Are likes and reposts up to date? They are a snapshot from the time of the run. Run again to refresh them. ### Do I pay for posts that do not exist? An input with no data is one small empty-result event. Error rows and duplicates are free. ### Do I need a Bluesky account or app password? No. The Actor reads only public data from the public Bluesky API and never asks for login. ### Are the counts live? They are a snapshot at `fetchedAt`. Run again to refresh them. ### Is this data complete? It is what the Bluesky API returns at fetch time. Deleted posts, blocked content and posts hidden by moderation are not included, and counts can be null when Bluesky does not report them. ### Can I scrape followers or DMs? Not in this version. DMs are private and will never be supported. ### Is scraping Bluesky allowed? The Actor uses only public endpoints at a modest request rate and does not bypass any limit. You are responsible for how you store and reuse the content, including personal data and authors' rights. ## Data fields - `recordType` (string): Row type: post, profile or status. Error rows are free; a not-found or invalid value is charged as one empty result. - `status` (string): complete for data rows; not_found, invalid_input or error for status rows. - `mode` (string): Mode that produced the row. - `input` (string): Your input value (query, handle, post URL or feed URL) that produced the row. - `errorCode` (string): Status rows: machine code such as NOT_FOUND, INVALID_INPUT, RATE_LIMITED, SOURCE_FORBIDDEN, SOURCE_UNAVAILABLE. - `message` (string): Status rows: plain-English reason. - `uri` (string): Post AT URI, e.g. at://did:plc:…/app.bsky.feed.post/3l… - `cid` (string): Post content ID (CID). - `url` (string): bsky.app link to the post or profile. - `author` (object): Post author: did, handle, displayName, avatar, url. - `text` (string): Post text. - `createdAt` (string): When the post or account was created (ISO 8601, as stated by the author record). - `indexedAt` (string): When Bluesky indexed the post or profile (ISO 8601). - `langs` (array): Language codes declared by the post, e.g. ["en"]. - `replyCount` (integer): Replies at fetch time. - `repostCount` (integer): Reposts at fetch time. - `likeCount` (integer): Likes at fetch time. - `quoteCount` (integer): Quote posts at fetch time. - `bookmarkCount` (integer): Bookmarks at fetch time, when Bluesky reports it. - `isReply` (boolean): true when the post is a reply. - `replyTo` (object): Parent post of a reply: uri and url. - `rootPost` (object): Thread root of a reply: uri and url. - `isRepost` (boolean): true when the row comes from a repost in a feed (see repostedBy, repostedAt). - `repostedBy` (object): Who reposted it into the feed: did and handle. - `repostedAt` (string): When it was reposted. - `isPinned` (boolean): true when the post is pinned on the author profile. - `isQuote` (boolean): true when the post quotes another post. - `quotedPost` (object): Quoted post: uri, url, authorHandle, text. - `embedType` (string): Attached media: images, video, external, record (quote), recordWithMedia or null. - `images` (array): Images: url, thumbnailUrl, alt text, width, height. - `video` (object): Video: playlistUrl, thumbnailUrl, alt text. - `externalLink` (object): Link card: url, title, description. - `links` (array): All links in the post text and link card. - `hashtags` (array): Hashtags without #. - `mentions` (array): Mentioned accounts: did and handle. - `labels` (array): Moderation and self labels on the post or profile. - `threadRole` (string): Thread mode: parent, anchor or reply. - `threadDepth` (integer): Thread mode: 0 for the requested post, negative for parents, positive for replies. - `did` (string): Profile DID (stable account ID). - `handle` (string): Profile handle, e.g. bsky.app. ## Input settings - `mode` (string, required): searchPosts: posts matching keywords, hashtags or from:/lang: operators (up to 100 per query). authorFeed: posts from accounts. profiles: profile details and follower counts. thread: a post with its parents and replies. feed: posts from a custom feed or list. - `queries` (array): Keywords, phrases in quotes, #hashtags, or Bluesky search operators such as from:bsky.app, lang:en, domain:example.com. One query per line, up to 100. Bluesky returns at most 100 posts per query without login. - `handles` (array): Bluesky handles (bsky.app, @jay.bsky.team), DIDs or profile links (https://bsky.app/profile/…). A bare name becomes name.bsky.social. Up to 100 accounts for posts, 1,000 for profiles. - `postUrls` (array): Post links like https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l or at:// URIs. Up to 100. - `feedUrls` (array): Custom feed links (https://bsky.app/profile/…/feed/…) or list links (https://bsky.app/profile/…/lists/…). Up to 50. - `maxItems` (integer): Upper limit of posts for each input value (profiles mode: ignored, one row per handle). Search stops at 100 per query. You pay per row written; a value with no data at all is one empty result. - `since` (string): Only posts created on or after this date, e.g. 2026-10-01 or 2026-10-01T12:00:00Z (UTC). Applies to search, account posts and feeds. - `until` (string): Only posts created before this date (UTC). - `searchSort` (string): latest: newest first. top: Bluesky's ranking of popular posts. - `language` (string): Language code for search, e.g. en, de, ja, pt-BR. Empty: all languages. - `includeReplies` (boolean): Keep replies in search and account posts. Turn off to get only top-level posts. - `includeReposts` (boolean): Also return posts the account reposted, marked isRepost with repostedBy and repostedAt. - `threadDepth` (integer): How many reply levels below the post to load. 0 returns only the post and its parents. ## Step by step on Apify 1. Open the Input tab. 2. Keep What to scrape on Search posts and add a word to Search queries, e.g. `apify`. 3. Keep Max posts per query at the prefilled `30` (the runtime default is `100`). 4. Click Start. 5. Open the Posts view in the Output tab and check `text`, `author.handle` and `likeCount`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Brand or keyword listening | `mode: searchPosts`, `queries` | post | `text`, `createdAt`, `likeCount`, `author.handle`, `links` | Schedule the Actor, export to Sheets or a database | | Account research | `mode: authorFeed`, `handles`, `since` | post | `text`, `isRepost`, `replyCount`, `externalLink` | Compare accounts, build datasets | | Influencer or lead list | `mode: profiles`, `handles` | profile | `displayName`, `description`, `followersCount`, `postsCount` | CRM import | | Discussion analysis | `mode: thread`, `postUrls` | post | `threadRole`, `threadDepth`, `text`, `replyTo` | Sentiment or topic analysis | | Curated topic monitoring | `mode: feed`, `feedUrls` | post | `text`, `hashtags`, `images[].alt` | AI summarisation | ## Tips - Split a big topic into narrow queries; search gives 100 posts per query. - Use date filters to get posts from one week only. - Turn off reposts if you want original posts only. ## Limits - Post row / profile row: one per data row written. - Empty result: one per input value that produced no data: a search query with no matches, an account with no matching posts, a profile, post or feed that does not exist, or a value that cannot be read (for example a typo in a link). If every value is unreadable, the run ends as `NO_RESULTS` with a message saying so, and each value is one empty result. It covers the requests made for that value. - Actor start: charged by Apify once per run (per GB of memory; the default 256 MB counts as one). - Free: `error` rows (Bluesky failed), skipped inputs, duplicate posts and duplicate input values (the same account, post or feed written another way, e.g. `@Name.bsky.social` and its profile link). - Search: up to 100 posts per query (Bluesky's limit without login). Split the topic into narrower queries or date ranges to see more. - Account posts: up to 10,000 feed items scanned per account. A scan also stops early when fewer than 1 in 100 items match the filters after the first 1,000 items, so a sparse filter does not read the whole history. - Feeds: the same sparse stop applies. - Speed at 256 MB: one account's 1,030 posts in about 5 s; 10,000 account posts took about 2–3 minutes in tests. Large jobs need a longer run timeout than the default 300 s; an input cut by the timeout is marked `partial` with its row count. ## Sample result ```json { "recordType": "post", "status": "complete", "mode": "searchPosts", "input": "opendata", "uri": "at://did:plc:aaaaaaaaaaaaaaaaaaaaaaaa/app.bsky.feed.post/3mexample2abc", "url": "https://bsky.app/profile/author.example/post/3mexample2abc", "author": { "did": "did:plc:aaaaaaaaaaaaaaaaaaaaaaaa", "handle": "author.example", "displayName": "Sample Author", "url": "https://bsky.app/profile/author.example" }, "text": "Our open dataset is live! Thanks @team.example #opendata https://data.example/downloads", "createdAt": "2026-10-12T09:15:00.000Z", "likeCount": 2431, "repostCount": 318, "replyCount": 154, "isReply": false, "isRepost": false, "embedType": "images", "images": [ { "url": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:aaaaaaaaaaaaaaaaaaaaaaaa/bafkexample@jpeg", "alt": "Chart of monthly downloads" } ], "links": ["https://data.example/downloads"], "hashtags": ["opendata"], "mentions": [{ "did": "did:plc:bbbbbbbbbbbbbbbbbbbbbbbb", "handle": "team.example" }], "quotedPost": null, "threadRole": null, "fetchedAt": "2026-10-13T01:52:14.278Z", "source": "Bluesky AppView API (AT Protocol)" } ``` ## Use it from code Actor ID: `cliqtomedia/bluesky-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/bluesky-scraper").call(run_input={ "mode": "searchPosts", "queries": [ "apify" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~bluesky-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"mode": "searchPosts", "queries": ["apify"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/bluesky-scraper") result = tool.invoke({"run_input": {"mode": "searchPosts", "queries": ["apify"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Hear what people say about you](https://cliqtomedia.com/actors/use-cases/social-listening/): Find what people say about your brand and your topic on Bluesky, Hacker News, YouTube and more. ## Similar tools - [Substack Newsletter Scraper](https://cliqtomedia.com/actors/substack-newsletter-scraper/) - [Hacker News Stories & Comments Scraper](https://cliqtomedia.com/actors/hacker-news-stories-comments-scraper/) - [Bilibili Scraper: Videos, Comments & Creators, No Login](https://cliqtomedia.com/actors/bilibili-scraper/) - [Medium Article Scraper: Tags, Authors & Publications](https://cliqtomedia.com/actors/medium-articles-scraper/) - [Pinterest Search Scraper: Pins & Boards, No Login](https://cliqtomedia.com/actors/pinterest-search-scraper/) - [Product Hunt Launches Scraper – Daily Top, No Login](https://cliqtomedia.com/actors/product-hunt-launches/) --- # Breezy HR Jobs Monitor and Scraper > Breezy HR jobs scraper for public boards: descriptions, salary and job links in JSON or CSV. Monitoring shows new, changed and removed jobs. URL: https://cliqtomedia.com/actors/breezy-jobs-monitor-scraper/ Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/breezy-jobs-monitor-scraper?fpr=cliqto Add up to 4 Breezy HR board URLs. You get current jobs with descriptions and links. Salary appears when the employer shares it, and monitoring shows changes. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `https://the-san-francisco-standard.breezy.hr/` in Breezy career URLs. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Read public Breezy HR jobs from company career boards. Get descriptions, salary data and job links in JSON or CSV. Turn on monitoring to see new, changed and removed jobs after a full scan. Pay $0.0018 per saved current job, plus $0.06 per run. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.06 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Current job saved | $0.0018 | One unique matching current job saved to the default Dataset. | - One job: about $0.06. - 1,000 jobs: about $1.86. - Every day 100 jobs, for 30 days: about $7.20 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/breezy-jobs-monitor-scraper?fpr=cliqto ## Questions ### Do I need a Breezy account? No. It reads public job boards. ### Why are some values empty? The employer did not publish them. Missing data stays null. ### Can it search every Breezy company? No. You give the boards you want to read. ### How many jobs per run? Up to 50 saved jobs from up to 4 boards. ### Are all remote jobs fully remote? No. The public marker can also appear on hybrid roles. Check `workplace`, applicant locations and the description. ### Can this replace another Breezy scraper? The core field names follow a public career-site scraper. Description spacing, location text and result order can differ. This Actor adds status and monitoring fields. Check your mapping before switching. ## Data fields - `company` (string) - `company_url` (string) - `company_logo` (string) - `description` (string) - `date_posted` (string) - `valid_through` (string) - `department` (string) - `salary_text` (string) - `feed_published_at` (string) - `workplace` (string) - `first_seen_at` (string) - `job_id` (string) - `title` (string) - `location_text` (string) - `url` (string) - `source` (string) - `career_site_url` (string) - `scraped_at` (string) - `row_status` (string) - `change_type` (string) - `remote` (boolean) - `feed_remote` (boolean) - `locations` (array) - `employment_types` (array) - `applicant_locations` (array) - `salary` (object) - `detail_source` (string) ## Input settings - `careerUrls` (array, required): Add 1–4 HTTPS Breezy board roots or public /p/ job URLs. Duplicate boards are read once. Custom domains are not supported. - `query` (string): All words must appear in title, company, full description, type or location. Empty means all jobs. - `location` (string): Case-insensitive text in structured location. Empty means all locations. - `remoteOnly` (boolean): Keep jobs with the public TELECOMMUTE marker. Some hybrid jobs also have this marker. Check workplace. - `includeDescription` (boolean): Return clean plain text. Detail pages are still read for salary, dates and filters. - `maxResults` (integer): Total saved current jobs, 1–50. Default 10. A capped scan is partial and cannot update the monitoring snapshot. - `monitor` (boolean): Compare full matching scans. First full run sets the baseline. CHANGES lists removed jobs. Use sequential runs. - `monitorKey` (string): Use a separate name for each monitoring workflow. Configuration changes create a new baseline. ## Step by step on Apify 1. Open Input. 2. Add `https://the-san-francisco-standard.breezy.hr/` to `careerUrls`. 3. Keep `maxResults: 10` and `includeDescription: true`. 4. Click Start. 5. Open Current jobs. Check `job_id`, `title` and `salary`. 6. Open Board status. A full scan has `status: "complete"`. ## Use cases - Build a job board from known companies. Use `job_id` and `career_site_url` to update records. - Follow hiring changes at target accounts. Read `CHANGES` after each complete monitored run. - Collect research data. Export titles, dates, locations and disclosed salary values. ## Tips - Use the company.breezy.hr address. Custom career domains do not work. - Read the CHANGES record after each complete monitored run. - Check the workplace field before you call a job fully remote. ## Limits - Up to 4 input boards and 50 saved current jobs per run. The feed itself may contain more jobs. - Supported Cloud memory: 256 or 512 MB. The recommended timeout is 210 seconds; the 300-second Store test and larger finite positive timeouts are supported. Unsupported memory or an unlimited timeout is rejected before source work. Each request has a 15-second timeout. The Actor stops source work after 180 seconds or before its Cloud timeout. - At most 200 source HTTP attempts, including retries. Feed body limit: 5 MiB. Detail body limit: 2 MiB. Total received source body data is limited to 16 MiB, including unsuccessful responses and retries. SOURCE_BYTE_LIMIT stops further reads; the scan cannot update its monitoring baseline. - Only public HTTPS Breezy subdomains are allowed. Private network addresses and redirects are rejected. - A blocked feed, invalid JSON or changed source format is an error, not an empty board. - A valid empty feed or no filter matches is `complete` with zero rows. - A missing board is `not_found`. If all boards fail or are missing, the platform run fails. Mixed results are `partial`. - A detail error can save a partial metadata row without active filters. With active filters, an unreadable detail is skipped and the scan stays partial. ## Sample result ```json { "job_id": "48d4a6862c5d", "title": "AI & Work Reporter, Charter", "company": "The San Francisco Standard", "date_posted": "2026-06-02", "remote": true, "workplace": "hybrid", "salary": {"currency":"USD","unit":"YEAR","min":90000,"max":130000,"value":null}, "salary_text": "$90,000 – $130,000 / year", "url": "https://the-san-francisco-standard.breezy.hr/p/48d4a6862c5d-ai-work-reporter-charter", "row_status": "complete", "change_type": "untracked" } ``` ## Use it from code Actor ID: `cliqtomedia/breezy-jobs-monitor-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/breezy-jobs-monitor-scraper").call(run_input={ "careerUrls": [ "https://the-san-francisco-standard.breezy.hr/" ], "query": "" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~breezy-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"careerUrls": ["https://the-san-francisco-standard.breezy.hr/"], "query": ""}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/breezy-jobs-monitor-scraper") result = tool.invoke({"run_input": {"careerUrls": ["https://the-san-francisco-standard.breezy.hr/"], "query": ""}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) --- # Bulk email validator that gives back a clean CSV > Bulk email validator for CSV files, Google Sheets or pasted lists. Get a clean CSV with your columns and a status for each address. No login. URL: https://cliqtomedia.com/actors/bulk-email-validator/ Category: Leads, companies & validation · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Upload your email list as a CSV or Google Sheet link. The tool checks each address and gives back a clean CSV. Your columns stay in place. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `info@apify.com` in Emails. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Bulk Email List Validator takes a CSV file, a Google Sheet link or a pasted list of email addresses, removes duplicates, checks every address and gives you back a clean CSV with your original columns. Each address gets a status (deliverable, risky, undeliverable or unknown) and a reason, based on syntax, DNS mail records, disposable domains, role addresses and domain typos. No login and no API key. - Reads your list: a CSV file you upload, a public CSV link, a Google Sheets share link, or addresses you paste. It finds the email column by its name or by its content. - Removes duplicate addresses (upper and lower case count as the same address). - Checks each address: - Syntax by the email standards. `john..doe@example.com` fails because of the two dots. - Domain mail records (DNS): MX records, a "null MX" record that says the domain takes no mail (RFC 7505), and the A/AAAA fallback when a domain has no MX. - Disposable domains (temporary inboxes like mailinator.com), role addresses (info@, sales@, support@…) and free providers (gmail.com, outlook.com…). - Typos in popular domains: `name@gmial.com` → suggestion `name@gmail.com`. - Writes one Dataset row per address and three files: `CLEAN_LIST.csv` (only the rows you can send to), `ALL_RESULTS.csv` and `RUN_SUMMARY` (how clean your list is). ### Good for - Clean a CSV export from Mailchimp, HubSpot, Excel or a CRM before the next send. - Find and remove fake, mistyped, disposable and role addresses from a sign-up list. - Get a quick "how dirty is this list" report: percent of bad addresses and the main reasons. ### Not a good fit - No mailbox check (SMTP). The Actor does not connect to the mail server, so it cannot tell if a mailbox exists on a working domain. A made-up `fake-123@example.com` is `deliverable` here. It also does not detect catch-all domains. - It does not find new email addresses. It only checks the ones you give. - Up to 25,000 unique addresses and a 10 MB CSV file per run. ## Price Prices will be shown after release. ## Questions ### Does it check if a mailbox really exists? No. It does not connect to mail servers. It removes clearly bad addresses. ### Can I use a Google Sheet? Yes. Paste a Google Sheets share link or a public CSV link. ### Is my list sent to another company? No. It uses public DNS and built-in lists. Results stay in your Apify storage. ### Should I delete risky addresses? Not always. Role addresses like info@ often work. Typos and temporary inboxes are usually bad. ### Do I need an account with an email verification service? No. The Actor uses public DNS and built-in lists. No API key, no login. Your list is not sent to a third-party verification service. ### Why is a fake gmail.com address "deliverable"? Because the Actor does not ask the mail server if the mailbox exists (outgoing SMTP port 25 is closed on the platform). gmail.com has working mail servers, so the address passes. Use this Actor to remove clearly bad addresses before a mailbox check, not instead of it. ### Should I remove every `risky` address? Not always. Role addresses like `info@` often work, but many senders avoid them in cold email. Disposable and typo addresses are usually not worth sending to. Choose `deliverable_and_risky` if you want to keep risky rows in the clean list and decide yourself. ### Is my list stored? The results stay in your own Apify storage. `RUN_SUMMARY` and the run log contain counts only, not addresses. Uploaded files are kept as your Apify storage keeps them. ## Data fields - `email` (string): The address as found in your list (trimmed). - `status` (string): deliverable: valid syntax and a working mail domain, no risk flags. risky: the domain accepts mail but there is a risk flag. undeliverable: invalid syntax or the domain cannot receive mail. unknown: DNS failed; not charged. The mailbox itself is not probed. - `reason` (string): Main reason code: mx_found, invalid_syntax, domain_not_found, null_mx_domain_accepts_no_mail, no_mail_server, mx_host_unresolvable, dns_lookup_failed, disposable_domain, possible_domain_typo, role_account, no_mx_a_record_fallback. - `reasons` (array): All reason codes. mailbox_not_verified is added to deliverable and risky rows because no SMTP probe is made. - `mx` (string): Highest-priority MX host of the domain, or null. - `mxProvider` (string): Mail provider recognised from the MX host (Google, Microsoft, …). - `disposable` (boolean): The domain is a known disposable (temporary) email service. - `role` (boolean): The local part is a role/team inbox such as info@, sales@, support@. - `freeProvider` (boolean): The domain is a free webmail provider (gmail.com, yahoo.com, …). - `didYouMean` (string): Suggested fix for a likely domain typo (gmial.com → gmail.com). - `inCleanList` (boolean): The row is in CLEAN_LIST.csv. - `source` (string): Where the address came from. - `sourceRow` (integer): Data row number in your CSV (header not counted), or the position in the pasted list. - `checkedAt` (string): ISO time of the check. ## Input settings - `emails` (array): Paste addresses, one per line (commas and semicolons also work). You can use this, a CSV file, or both. Up to 25,000 unique addresses per run. - `csvUrl` (string): Upload a CSV file or paste a public link to one (a Google Sheets share link works too). Commas, semicolons and tabs are detected. The clean list keeps all your original columns. Max 10 MB. - `emailColumn` (string): Name (or 1-based number) of the column with addresses. Leave empty to detect it automatically. - `dedupe` (boolean): Check each address once (case-insensitive) and keep only its first row in the clean list. Duplicates are not charged. - `cleanList` (string): Which rows go into CLEAN_LIST.csv. Risky means the domain accepts mail but the address is disposable, a role account (info@, sales@), a likely typo or has no MX record. - `concurrency` (integer): How many addresses are checked at the same time. ## Step by step on Apify 1. Open the Input tab. 2. Keep the example addresses in Emails (`emails`), paste your own, or upload a file in CSV file (`csvUrl`). 3. Keep Remove duplicates (`dedupe`) on and Clean list keeps (`cleanList`) at `deliverable`. 4. Click Start. Two addresses take a few seconds. 5. Open the Output tab. Check the `status` and `reason` columns, then download `CLEAN_LIST.csv` from the storage tab. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Clean a CRM or ESP export | `csvUrl` (upload) | `CLEAN_LIST.csv` | your columns + `email_status`, `email_reason` | import the file back into your email tool | | Check a shared Google Sheet | `csvUrl` (share link) | Dataset + `ALL_RESULTS.csv` | `status`, `reason`, `didYouMean` | fix typos in the sheet | | Check a few pasted addresses | `emails` | Dataset | `status`, `reason`, `role`, `disposable` | decide who to email | | Measure list quality | any | `RUN_SUMMARY` | `percent`, `byReason`, `listHealth` | decide if the list is safe to send | ## Tips - Leave the email column empty. The tool finds it by name or content. - Keep duplicate removal on. Duplicates are not charged. - Split lists over 25,000 addresses into several runs. ## Limits - `unknown` rows (DNS failed) are not charged. - Duplicates removed by `dedupe` are not charged. - A CSV of 1 MB or less has no file fee. A 25,000-row file with one email column is about 0.8 MB. - A run that fails on input pays the start fee, plus the CSV megabytes if a large file was downloaded. - 25,000 unique addresses per run (25,000 took about 5 minutes in our tests). Split bigger lists into several runs. - CSV file up to 10 MB. - CSV links: `http` or `https` only, public addresses only, ports 80, 443, 8080, 8443. ## Sample result ```json { "email": "info@apify.com", "status": "risky", "reason": "role_account", "reasons": ["role_account", "mailbox_not_verified"], "mx": "aspmx.l.google.com", "mxProvider": "Google", "disposable": false, "role": true, "freeProvider": false, "didYouMean": null, "inCleanList": false, "source": "emails", "sourceRow": 1, "checkedAt": "2026-10-15T17:37:39.844Z" } ``` ## Use cases with this tool - [Lead lists from public data](https://cliqtomedia.com/actors/use-cases/lead-generation/): Build lists of companies and contacts from public sites. Check emails and phones before you send. ## Similar tools - [Bulk Email Verifier: MX, Disposable, Role & Typo Check](https://cliqtomedia.com/actors/email-verifier/) - [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/) - [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/) - [EU VAT Number Validator (VIES) - Bulk Check, No Login](https://cliqtomedia.com/actors/vat-number-validator/) - [Europages Scraper: B2B Suppliers & Certificates (No Login)](https://cliqtomedia.com/actors/europages-companies-scraper/) - [France Company & SIRET Search](https://cliqtomedia.com/actors/france-sirene-company-search/) --- # Bulk URL Status and Redirect Checker for SEO and Site Moves > Bulk URL status checker for site moves and SEO: final HTTP status, redirect steps and broken-link flags for up to 100 URLs per run. Export a table. URL: https://cliqtomedia.com/actors/bulk-url-status-redirect-checker/ Category: Developer & website monitoring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/bulk-url-status-redirect-checker?fpr=cliqto Paste a list of URLs and see where each one ends up. You get the final status code, the redirect steps and a broken flag. It helps before and after a site move. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `{"url": "https://example.com"}` in URLs to check. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Check a list of public URLs before a site move or SEO review. This bulk URL status checker returns the final HTTP status, redirect destinations and broken-link flags for each processed URL. Start with one URL and open its result table. Each run accepts up to 100 input items. An empty list fails; a stopped run may return part of the list. The charge model is pay per useful HTTP result plus an Actor Start event and platform usage. Optional Apify Proxy traffic adds usage costs. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.001 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | HTTP URL result | $0.00225 | One stored URL result with an HTTP response, including 404 or 503. No charge for technical failures, duplicates or invalid inputs. | - One URL: about $0.0032. - 1,000 URLs: about $2.26 (10 runs of up to 100). - Every day 100 URLs, for 30 days: about $6.78 a month. - 100 URLs once a week (4 runs a month): about $0.90 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/bulk-url-status-redirect-checker?fpr=cliqto ## Questions ### Does it find soft 404 pages? No. It reports the real HTTP status. A page that says not found with status 200 is not flagged. ### Is every redirect a problem? No. A redirect is normal. Check loops, many hops or a broken final page. ### Can I check internal or login pages? No. It checks only public HTTP and HTTPS addresses. ### Does a 404 cost money? Yes. A 404 is a useful result and counts. Network failures with status 0 do not count. ### Can I see the status of every redirect hop? The Dataset stores destination URLs, not a status code for each hop. `statusCode` is the final HTTP code, or 0 on technical failure. ### Is a redirect always broken? No. A redirect to 200 normally has `isRedirect: true` and `isBroken: false`. A redirect to 404 is broken. ### Is the response time a speed score? No. It is the whole URL check time from the run environment, including retries and waits. It is not a Core Web Vital. ### Does a schedule compare results for me? No. Export the dated rows and compare them in your own system. ## Data fields - `url` (string) - `statusCode` (integer) - `statusMessage` (string) - `isBroken` (boolean) - `isRedirect` (boolean) - `redirectChain` (array) - `finalUrl` (string) - `responseTime` (integer) - `checkedAt` (string) ## Input settings - `startUrls` (array, required): Add 1–100 public HTTP/HTTPS URL objects. The Input form offers example.com as a small sample; API input must still include startUrls. Duplicate URLs are checked once. Invalid items are listed in the run summary. Do not add secrets or login details. - `maxConcurrency` (integer): How many URLs to check in parallel (1-100). - `proxyConfiguration` (object): Direct requests by default. Optional Apify Proxy; custom proxy URLs and credentials are unsupported. - `requestTimeoutSecs` (integer): Maximum wait for each DNS, proxy CONNECT and response-header phase. Total check time includes retries and redirects. TLS verification is always enabled. ## Step by step on Apify 1. Open the Actor in Apify Console and choose Input. 2. Switch to JSON and paste the minimal input below, or enter the URL objects in URLs to check. 3. Keep direct requests for a first check. A fresh form offers one public example.com URL; you can start this sample without editing it. API calls still require startUrls and never substitute a hidden demo. 4. Click Start. A run uses the selected build and run options. 5. Open Output → URL results → Table. Check `statusCode` and `finalUrl`. 6. Choose Export to save the results. Open Storage to read the separate summary. ## Use cases | Task | Add to `startUrls` | Review | Next step | |---|---|---|---| | Site migration URL check | Your old public URLs | `redirectChain`, `finalUrl`, `isBroken` | Compare the final destination with your own migration map | | Broken link list | URLs from a link report | `statusCode`, `isBroken`, `statusMessage` | Fix or replace failing links | | QA after a release | Known public endpoints | `statusCode`, `responseTime`, `checkedAt` | Re-check failed endpoints and keep the dated export | | Redirect audit | Known redirecting URLs | Ordered `redirectChain`, `isRedirect` | Review extra hops or broken destinations | ## Tips - Compare the final URL with your own redirect map after a move. - Split big lists into parts of 100 URLs. One run takes up to 100. - Look at the hop list. Many steps can slow pages and hurt SEO. ## Limits - At most 100 input items per run, counted before duplicate removal. Split larger lists yourself. - Concurrency range 1–100, default 20. Actual Cloud capacity was checked at concurrency 3 with 100 simple HTTP results; this does not promise the same speed or success for all sites. - Up to 10 redirect hops; loops and the hop limit produce broken results. A final target can be present in the chain before the cap prevents fetching it. - Up to 2 extra retries per request for network failures, 429 or 5xx. HEAD→GET fallback adds a request. Requests can therefore exceed the number of URLs. - Request phase timeout 1–30 seconds, default 10. Several phases, hops and retries can take longer than one timeout value. - Only public HTTP/HTTPS destinations. Private-network, loopback and unsafe targets are blocked, including at redirects and retries. TLS verification stays on. - URL credentials, secret query values and fragments are rejected. Custom proxy credentials are not accepted. - Results are saved as a batch after checking. A graceful stop can save finished and active rows and count queued URLs in `unprocessed`; a hard platform kill or storage failure may lose final results. There is no streaming or resume guarantee. ## Use it from code Actor ID: `cliqtomedia/bulk-url-status-redirect-checker` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/bulk-url-status-redirect-checker").call(run_input={ "startUrls": [ { "url": "https://example.com" } ], "maxConcurrency": 20 }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~bulk-url-status-redirect-checker/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"startUrls": [{"url": "https://example.com"}], "maxConcurrency": 20}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/bulk-url-status-redirect-checker") result = tool.invoke({"run_input": {"startUrls": [{"url": "https://example.com"}], "maxConcurrency": 20}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [SEO data without a big suite](https://cliqtomedia.com/actors/use-cases/seo-research/): Collect keyword ideas and check your pages and your rivals' pages. Search results and trends coming soon. ## Similar tools - [GitHub Releases Monitor & Scraper](https://cliqtomedia.com/actors/github-releases-monitor-scraper/) - [Software End-of-Life Checker](https://cliqtomedia.com/actors/software-end-of-life-checker/) - [Dependency Vulnerability Scanner (OSV)](https://cliqtomedia.com/actors/osv-dependency-vulnerability-scanner/) - [GitHub Repositories & Users Search (No Login)](https://cliqtomedia.com/actors/github-search/) - [OpenAPI Catalog & Breaking Change Detector](https://cliqtomedia.com/actors/openapi-spec-catalog-diff/) - [SSL Certificate Checker: Expiry, Chain & CT, No Login](https://cliqtomedia.com/actors/ssl-certificate-inspector/) --- # AutoScout24 scraper for car listings and prices > AutoScout24 scraper for car listings in 8 EU countries. Filter by make, model, year, price and mileage. Get price, photos and dealer. No login. URL: https://cliqtomedia.com/actors/car-listings-scraper/ Category: Classifieds & second-hand · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/car-listings-scraper?fpr=cliqto Pick a car make and model, and add filters. You get one row per listing with price, mileage, year, fuel and photos. On a schedule, get only new listings. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `BMW` in Make. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does AutoScout24 Car Listings Scraper finds used and new car listings on AutoScout24 in 8 EU countries by make, model, year, price and mileage, and returns one clean row per car with price, mileage, first registration, fuel, gearbox, power, location, dealer and photos. No login, cookies or API key are needed: type a make and a model, start, and 20 listings arrive in about 10 seconds for $0.0073. ### Good for - Track asking prices and mileage for one model in one or more countries. - Watch for new listings of a car you want to buy (schedule + Only new listings). - Build a list of dealers that sell a model, with their rating and location. - Collect a price sample for valuation or market research. ### Not a good fit - No full listing page: no description text, equipment list, colour, CO2 or seller phone numbers. - No private seller contacts. For private sellers you get only city, zip and country. - At most 2,000 listings per run. AutoScout24 shows up to 4,000 results per search; split big searches by country, year or price. - Other AutoScout24 markets (for example Switzerland) and other car sites are not covered. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.0025 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Saved listing | $0.00024 (from $0.0002 on paid Apify plans) | One car listing saved in the Dataset. Already-seen listings in onlyNew mode are not charged. | - One result: about $0.0027. - 1,000 results: about $0.24. - Every day 100 results, for 30 days: about $0.79 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/car-listings-scraper?fpr=cliqto ## Questions ### Which countries are covered? Germany, Austria, Belgium, Spain, France, Italy, Luxembourg and the Netherlands. ### Do I get seller phone numbers? No. For private sellers you get only city, zip and country. ### Do I get the full car description? No. The tool reads search results, not the full listing page. ### Do I need an AutoScout24 account? No. The tool reads public search results only. ### Do I need an AutoScout24 account, cookies or an API key? No. The Actor reads public search results only. ### Why is `firstRegistration` null for some cars? New cars often have no registration date yet. `null` means AutoScout24 shows no value. ### How fresh is the data? Every run reads AutoScout24 live. `fetchedAt` shows when each row was read. Prices and listings can change after that. ### Can I get more than 4,000 listings for one search? AutoScout24 shows at most 4,000 results per search, and the Actor saves at most 2,000 per run. Split a big search by country, year or price range. ## Data fields - `id` (string): AutoScout24 listing id (UUID in the listing URL). - `url` (string): Public listing page on www.autoscout24.com. - `title` (string): Make, model and version joined, e.g. "BMW 320 d Touring M Sport". - `make` (string): Make, e.g. "BMW". - `model` (string): Model, e.g. "320"; null when AutoScout24 lists the car under the make only (some vans and "Others"). - `modelGroup` (string): Model family when AutoScout24 provides it, e.g. "3 Series". - `version` (string): Version text written by the seller, e.g. "d xDrive Touring M Sport". - `price` (integer): Asking price; null when the listing shows no price (never 0 for a missing price). - `currency` (string): Price currency (EUR in all 8 markets); null without a price. - `priceRating` (string): AutoScout24 price rating label when shown, e.g. "good-price"; null otherwise. - `mileageKm` (integer): Odometer reading in kilometres. - `firstRegistration` (string): First registration as "YYYY-MM" (or "YYYY"). - `year` (integer): Year of first registration. - `fuel` (string): Fuel type, e.g. "Diesel", "Gasoline", "Electric". - `transmission` (string): Gearbox, e.g. "Automatic", "Manual". - `powerKw` (integer): Engine power in kW. - `powerHp` (integer): Engine power in hp. - `engineCc` (integer): Engine displacement in cm3; null when not stated (often for electric cars). - `offerType` (string): used, new, demonstration, pre_registered, employee_car or classic; other AutoScout24 codes are passed through as-is (e.g. "A"). - `location` (object): Where the car is offered: countryCode, zip, city; street only for dealers. - `sellerType` (string): dealer or private. - `dealerName` (string): Dealer company name; always null for private sellers. - `dealerId` (string): AutoScout24 dealer id; null for private sellers. - `dealerRating` (number): Dealer star rating on AutoScout24 when shown. - `dealerReviewCount` (integer): Number of dealer reviews when shown. - `images` (array): Photo URLs (720x540) from the search result, in listing order. - `imageCount` (integer): Number of photo URLs in images. - `source` (string): Always "autoscout24". - `fetchedAt` (string): When the row was fetched (ISO 8601, UTC). ## Input settings - `make` (string): Car brand as shown on AutoScout24, e.g. "BMW", "Volkswagen" (or "VW"), "Mercedes-Benz", "Toyota". Leave empty to search all makes. - `model` (string): Model or model line, e.g. "3 Series" (covers 316, 318, 320 ...), "C-Class" (also "C-Klasse"), "320", "Golf", "X5". Needs a make. An unknown name fails with suggestions instead of returning an empty list. - `country` (string): Where the car is offered. "all" covers all 8 AutoScout24 markets. - `yearFrom` (integer): Earliest year of first registration, e.g. 2019. - `yearTo` (integer): Latest year of first registration. - `priceFrom` (integer): Minimum asking price in euros. - `priceTo` (integer): Maximum asking price in euros. - `mileageMax` (integer): Only cars with at most this many kilometres. - `condition` (string): New, used, or both. - `sort` (string): Order of results. "Newest listings first" is best for monitoring with Only new listings. - `maxItems` (integer): Stop after this many listings. AutoScout24 shows at most 4,000 results per search; split big searches by country, year or price. - `onlyNew` (boolean): Return only listings that appeared since the previous run of the same search (with "Newest listings first", reading stops at the first page with no new listings; other orders stop after 5 such pages in a row). Use with a schedule to monitor new cars. The first run returns the newest listings up to Maximum listings and remembers them. - `stateKey` (string): Name for the Only new listings history (letters, digits, - and _). Leave empty to use one history per set of filters; set it to keep history when you tweak filters. ## Step by step on Apify 1. Open the Input tab. 2. Type a Make (`make`), for example `BMW`, and a Model (`model`), for example `3 Series`. 3. Keep the prefilled Country `de` (Germany) and Maximum listings `20`, or change them. 4. Click Start. 5. Open the Output tab and check `title`, `price` and `mileageKm`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Price check for one model | `make`, `model`, `country` | Car listing | `price`, `mileageKm`, `year`, `priceRating` | Export to CSV or Excel | | Alert on new cars | `onlyNew: true` + schedule | New car listings only | `url`, `price`, `firstRegistration` | Webhook or integration on run finish | | Dealer list for a model | `make`, `model`, `country` | Car listing from a dealer | `dealerName`, `dealerId`, `dealerRating`, `location` | Spreadsheet or CRM import | | Narrow buying search | `yearFrom`, `priceTo`, `mileageMax`, `condition` | Car listing | `price`, `mileageKm`, `fuel`, `transmission` | API call from your app | ## Tips - Use the model line, like 3 Series, to cover 316, 318 and 320. - Split big searches by country, year or price. One run saves up to 2,000. - A wrong model name fails fast with suggestions. It costs only the start. ## Limits - Listings already seen in Only new listings mode are skipped and not charged. - A run with a wrong make or model fails fast and costs only the run start. - If the run stops at your spending cap or time limit, you pay only for the rows that were saved. ## Sample result ```json { "id": "ffb3f43b-6b16-4b35-84f1-e1ac2706c187", "url": "https://www.autoscout24.com/offers/bmw-320-d-touring-advantage-hifi-dab-spur-diesel-black-cat_ma13mo1641-ffb3f43b-6b16-4b35-84f1-e1ac2706c187", "title": "BMW 320 d Touring Advantage / HIFI / DAB / Spur", "make": "BMW", "model": "320", "modelGroup": "3 Series", "version": "d Touring Advantage / HIFI / DAB / Spur", "price": 19299, "currency": "EUR", "priceRating": "top-price", "mileageKm": 112257, "firstRegistration": "2021-02", "year": 2021, "fuel": "Diesel", "transmission": "Automatic", "powerKw": 140, "powerHp": 190, "engineCc": 1995, "offerType": "used", "location": { "countryCode": "DE", "zip": "21614", "city": "Buxtehude", "street": "Example Street 3" }, "sellerType": "dealer", "dealerName": "Example Autohaus", "dealerId": "44450405", "dealerRating": 5, "dealerReviewCount": 9, "images": ["https://prod.pictures.autoscout24.net/listing-images/ffb3f43b-…/720x540.webp"], "imageCount": 15, "source": "autoscout24", "fetchedAt": "2026-10-15T00:54:34.255Z" } ``` ## Use it from code Actor ID: `cliqtomedia/car-listings-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/car-listings-scraper").call(run_input={ "make": "BMW", "model": "3 Series" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~car-listings-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"make": "BMW", "model": "3 Series"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/car-listings-scraper") result = tool.invoke({"run_input": {"make": "BMW", "model": "3 Series"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [Depop Scraper - Listings, Prices, Brands & Shops](https://cliqtomedia.com/actors/depop-scraper/) - [Kleinanzeigen Scraper: Listings, Prices & Photos (No Login)](https://cliqtomedia.com/actors/kleinanzeigen-scraper/) - [OLX Listings Scraper: Poland, Ukraine, Romania & More](https://cliqtomedia.com/actors/olx-listings-scraper/) - [Subito.it Scraper - Italy Classifieds & Prices, No Login](https://cliqtomedia.com/actors/subito-listings-scraper/) - [Craigslist Scraper - Listings, Prices & Photos, No Login](https://cliqtomedia.com/actors/craigslist-scraper/) - [Vinted Scraper - Listings, Prices & Brands in 25 Countries](https://cliqtomedia.com/actors/vinted-scraper/) --- # ClinicalTrials.gov Studies Search and Monitor > ClinicalTrials.gov API tool to search studies by condition, drug, sponsor, country, status and phase. Export to CSV and track status changes. URL: https://cliqtomedia.com/actors/clinicaltrials-gov-studies-monitor/ Category: Science & research data · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Search ClinicalTrials.gov with simple filters and export study records. Save a snapshot and compare it next time. You see which studies are new or changed status. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `[]` in Study countries. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Search ClinicalTrials.gov by disease, treatment, sponsor, country, recruitment status or phase. Get study records and compare them with your own earlier snapshot. No API key is needed. ## Price Prices will be shown after release. ## Questions ### Can it match patients to trials? No. It returns public study data only. It gives no medical advice. ### Does it give contact details? No. Personal contacts are not returned. ### How many studies can one run check? Up to 500 studies per run. ### Do I need an API key? No. The ClinicalTrials.gov API is public. ## Data fields - `nctId` (string): ClinicalTrials.gov registry ID, for example NCT07348432. - `briefTitle` (string): Short public title of the study. - `officialTitle` (string): Full official study title. Null when the registry has none. - `overallStatus` (string): Overall recruitment status, for example RECRUITING or COMPLETED. - `phases` (array): Study phases from the registry, for example PHASE2 and PHASE3. Empty when no phase is reported; NA means not applicable. - `studyType` (string): INTERVENTIONAL, OBSERVATIONAL or EXPANDED_ACCESS. Null when not reported. - `conditions` (array): Diseases or conditions reported for the study. - `interventions` (array): Treatments as {name, type}, for example a drug or device. No contact data. - `leadSponsor` (string): Organization that leads the study. Null when not reported. - `leadSponsorClass` (string): Registry organization class, for example INDUSTRY, NIH or OTHER. - `collaborators` (array): Partner organizations as {name, class}. - `enrollment` (number): Number of participants reported by the sponsor. Null means not reported, not zero. - `enrollmentType` (string): ACTUAL for a reported count, ESTIMATED for a planned count. - `startDate` (object): Study start as {date, type}. Type is ACTUAL or ESTIMATED; the date can be year-month only. - `primaryCompletionDate` (object): Date of the last main outcome measurement as {date, type}. - `completionDate` (object): Study completion as {date, type}. - `locationsCount` (integer): Number of study site entries. Null when the registry did not return sites. - `countries` (array): Unique countries of study sites. - `lastUpdatePostDate` (string): Date the latest study update was posted, YYYY-MM-DD. - `url` (string): Public ClinicalTrials.gov page of the study. - `provider` (string): Always ClinicalTrials.gov. - `sourceUrl` (string): Official API URL of this study record. - `fetchedAt` (string): Time this run read the record, ISO UTC. - `sourceUpdatedAt` (string): Same value as the last update posted date. - `providerDataTimestamp` (string): Registry data processing time from the API version endpoint. - `license` (string): Reuse terms notice for the registry data. - `licenseUrl` (string): Link to the ClinicalTrials.gov terms and conditions. - `changeType` (string): SNAPSHOT without a baseline; NEW, UNCHANGED, STATUS_CHANGED or UPDATED against your previous snapshot. - `changedFields` (array): overallStatus for a status change, record for any other content change. - `contentHash` (string): SHA-256 of the normalized study content, used for comparison. Fetch time is not included. ## Input settings - `condition` (string): Condition search, such as diabetes. Empty searches all conditions. Maximum 200 characters. - `intervention` (string): Treatment search, such as metformin. Empty means any intervention. Maximum 200 characters. - `sponsor` (string): Organization name. Empty means any sponsor. Maximum 200 characters. - `updatedSince` (string): Inclusive last-update posted date in YYYY-MM-DD. Empty means no date filter. - `countries` (array): Exact registry country names, such as United States. OR within list, AND with other filters. Maximum 20 names. - `overallStatus` (array): OR within the list; empty means any status. - `phase` (array): OR within the list; empty means any phase. Not applicable (NA) is a registry value, different from a missing phase. - `maxResults` (integer): Stop after 1–500 distinct studies. Default 100; demo 25. In onlyNew mode caps scanned studies, not changes. Newest updates first. - `previousSnapshot` (object): Paste the whole SNAPSHOT object from your earlier run with the same filters and maxResults. Up to 2,000 study fingerprints. Do not paste Dataset rows. - `onlyNew` (boolean): False returns every study with change labels. True emits NEW, STATUS_CHANGED and UPDATED only. Requires previousSnapshot. No hidden state or automatic schedule. ## Step by step on Apify 1. Open Input. The new form has `condition: "diabetes"`, `overallStatus: ["RECRUITING"]`, `maxResults: 25` and `onlyNew: false`. 2. Click Start. 3. Open Output → Studies. Check `nctId`, `briefTitle` and `overallStatus`. 4. Export JSON, CSV or Excel from the Dataset. 5. For a later comparison, open Next snapshot and save the whole JSON object. ## Use cases | Task | Filters | Key fields | |---|---|---| | Review a disease research pipeline | `condition`, `phase` | NCT ID, phases, sponsor, enrollment | | Review an organization portfolio | `sponsor` | Titles, countries, dates | | Watch recruitment updates | `previousSnapshot`, `onlyNew` | Change type, status, content fingerprint | | Export a regional registry list | `countries`, `overallStatus` | Countries, status, source links | ## Tips - Start with a small max number, like 25, then grow it. - Keep the same filters when you use a saved snapshot. - Look at the date type. Estimated dates are plans, not facts. ## Limits The proven maximum is 500 distinct studies per run. Work at the source stops after 90 seconds. Requests have a 15-second limit, including the body. The Actor retries temporary errors at most three attempts, with at most two timeouts. It reads at most 10 study pages and accepts at most 6 MB of response data. A large or slow response can produce partial output. ## Sample result ```json { "nctId":"NCT07348432", "briefTitle":"The diabEAT Study: Insulin dElivery Technologies And eaTing Behaviours in People With Type 1 Diabetes", "overallStatus":"RECRUITING", "phases":[], "studyType":"OBSERVATIONAL", "leadSponsor":"McGill University", "enrollment":106, "enrollmentType":"ESTIMATED", "startDate":{"date":"2024-07-29","type":"ACTUAL"}, "primaryCompletionDate":{"date":"2026-10-31","type":"ESTIMATED"}, "completionDate":{"date":"2027-04-30","type":"ESTIMATED"}, "locationsCount":1, "countries":["Canada"], "lastUpdatePostDate":"2026-10-09", "url":"https://clinicaltrials.gov/study/NCT07348432", "changeType":"SNAPSHOT" } ``` ## Similar tools - [Google Patent Details Scraper](https://cliqtomedia.com/actors/google-patents-scraper/) - [DOI Metadata & Bibliography Enrichment](https://cliqtomedia.com/actors/doi-bibliography-enrichment/) - [DataCite Research Dataset Search](https://cliqtomedia.com/actors/datacite-dataset-search/) - [Europe PMC Literature Search & Monitor](https://cliqtomedia.com/actors/europe-pmc-literature-search/) - [GBIF Biodiversity Occurrence Search](https://cliqtomedia.com/actors/gbif-occurrence-search/) - [Google Scholar Search Scraper - Citations & PDFs, No Login](https://cliqtomedia.com/actors/google-scholar-scraper/) --- # Craigslist scraper for listings, prices and photos > Craigslist scraper for 700+ city sites. Search by category, keyword and price. Get title, price, location, photos and date. Only-new mode. No login. URL: https://cliqtomedia.com/actors/craigslist-scraper/ Category: Classifieds & second-hand · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Pick Craigslist cities, a category and a keyword. You get one row per listing with price, place, time and photos. Turn on details for the full text and attributes. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `sfbay` in Cities. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Craigslist Scraper searches Craigslist by city, category and keyword and returns one clean row per listing: title, price, location, posting time and photo links. Turn on **Include full listing details** to also get the description, attributes and ZIP code. ### Good for - Price research: collect asking prices for bikes, cars, furniture or rentals in one or more cities. - Monitoring: run on a schedule with Only new listings since last run and get only listings posted after the previous run. - Housing and car data: bedrooms, square feet and odometer from search, plus attributes like `housing_type`, `laundry`, `make_manufacturer` or `odometer` with details. ### Not a good fit - No seller contacts. The Actor does not collect phone numbers or e-mails, and masks the ones it recognises in titles and descriptions (best effort, not a guarantee). - Craigslist shows at most 10,000 listings per search. To get more, split the search by city, category or price. - Up to 50 cities per run. Listings that Craigslist adds from nearby sites are left out; add those sites as their own cities. - `query` is a full-text search, like the Craigslist search box: `bike` also finds listings that only mention a bike in the text. ## Price Prices will be shown after release. ## Questions ### Do I need a Craigslist account or proxy? No. The tool reads public search and listing pages. ### Does it collect seller phone numbers? No. It masks phones and emails it finds in the text. ### Which countries work? Any Craigslist site: US, Canada, UK, Europe, Asia, Australia and more. ### Why does an old listing look new? Craigslist lists renewed posts again. postedAt shows the latest renewal. ### How fresh is the data? Each row is read during the run; `fetchedAt` shows when. Craigslist lists renewed listings again as new, so `postedAt` is the latest posting or renewal time. ### Is scraping Craigslist allowed? The Actor reads only public pages at a gentle pace. You are responsible for using the data in line with the Craigslist terms of use and the laws that apply to you, including privacy laws. ## Data fields - `postId` (string): Craigslist post id (the number shown as "post id" on the listing page). - `url` (string): Public listing page on craigslist.org; null in the rare case the source gives no link. - `title` (string): Listing title as written by the poster. Phone numbers and e-mails are masked. - `price` (number): Asking price as a number in the local currency; null when the listing has no price (never 0 for a missing price). - `priceText` (string): Price as Craigslist shows it, e.g. "$1,250" or "£300". - `currency` (string): ISO currency of the price (USD, CAD, GBP, EUR…); null without a price. - `city` (string): Craigslist site of the listing, e.g. "sfbay". - `cityName` (string): Readable site name, e.g. "SF bay area". - `subarea` (string): Sub-area code within the site, e.g. "pen" (peninsula), "sfc" (San Francisco). - `location` (string): Place the poster typed, e.g. "san mateo". - `neighborhood` (string): Neighborhood Craigslist assigned, when known. - `latitude` (number): Approximate latitude of the listing. - `longitude` (number): Approximate longitude of the listing. - `category` (string): Craigslist category code of the listing, e.g. "bik" (bicycles - by owner). - `categoryName` (string): Readable category, e.g. "bicycles - by owner". - `sellerType` (string): "owner" or "dealer" when the category says so; null otherwise. - `postedAt` (string): When the listing was posted or last renewed, UTC ISO 8601. - `images` (array): Photo links (600×450 JPEG). With details: every photo of the listing. - `imageCount` (integer): Number of photo links in images. - `bedrooms` (integer): Bedrooms (housing). - `sqft` (integer): Floor area in square feet (housing). - `mileage` (integer): Odometer (vehicles), as listed in search results. - `description` (string): Full listing text (only with includeDetails). Phone numbers and e-mails are masked. - `attributes` (object): Listing attributes from the page, e.g. condition, make_manufacturer, odometer, housing_type, laundry (only with includeDetails). - `postalCode` (string): ZIP / postal code from the listing page (only with includeDetails). - `firstPostedAt` (string): First posting time, UTC ISO 8601 (only with includeDetails). - `updatedAt` (string): Last update time, UTC ISO 8601; null when never updated (only with includeDetails). - `detailsStatus` (string): ok = page read; gone = listing removed before it could be read; failed = page unreadable (search fields only); not_requested = includeDetails off. - `searchCity` (string): City from your input that found this listing. - `searchCategory` (string): Category from your input. - `searchQuery` (string): Keywords from your input. - `source` (string): Always "craigslist.org". - `fetchedAt` (string): When the Actor read the listing, UTC ISO 8601. ## Input settings - `cities` (array, required): Craigslist sites to search: the subdomain from the city address, e.g. "sfbay" for sfbay.craigslist.org, "newyork", "losangeles", "london", "toronto". Full addresses work too. Any of the 700+ Craigslist sites, up to 50 per run. - `category` (string): Craigslist section to search. "— all" entries cover the whole group. - `query` (string): Words as you would type them in the Craigslist search box, e.g. "road bike" or "iphone 15". Leave empty to list the whole category. - `maxItems` (integer): Upper limit of listings saved for each city, newest first. Craigslist itself lists at most 10,000 per search. - `includeDetails` (boolean): Also open each listing page for the full description, attributes (condition, make, odometer, bedrooms…), all photos and ZIP code. Slower and charged as a detailed listing. Phone numbers and e-mails in the text are always masked. - `onlyNew` (boolean): Saves (and charges) only listings posted or renewed after the previous run of the same search. The first run saves the newest listings up to the limit and sets the starting point. Use it with a schedule to monitor a search. - `minPrice` (integer): Only listings priced at or above this, in the local currency of the site. - `maxPrice` (integer): Only listings priced at or below this, in the local currency of the site. - `sellerType` (string): All sellers, owners only or dealers only (for-sale categories). - `hasImages` (boolean): Skip listings without pictures. - `postedToday` (boolean): Only listings posted today. ## Step by step on Apify 1. Open the Input tab. 2. Keep the prefilled example: Cities `sfbay`, Category `For sale — all`, Search keywords `bike`, Max listings per city `10`. 3. Click Start. 4. Open the Output tab. The Listings view shows title, price, location and posting time. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Compare used prices | `cities`, `category`, `query` | listing row | `price`, `currency`, `title`, `location` | Export CSV or Excel | | Watch new listings | `onlyNew` on a schedule | only new rows | `postId`, `postedAt`, `url` | Webhook or integration on run finish | | Rental research | `category: "apa"`, `includeDetails` | detailed row | `price`, `bedrooms`, `sqft`, `attributes`, `postalCode` | Spreadsheet or BI tool | | Car listings | `category: "cta"`, `sellerType` | listing row | `price`, `mileage`, `attributes.odometer` | Dataset API | ## Tips - Use the city subdomain, like sfbay or newyork. Up to 50 per run. - Split big searches by city or price. Craigslist shows up to 10,000 per search. - Keep details off for fast price lists. Turn it on for attributes. ## Limits - A run with no matching listings, or an Only new run with nothing new, costs only the start. - Listings that were already delivered (Only new) or left out as nearby sites are not charged. - A listing removed before its page could be read is charged as a plain listing, not as a detailed one. - Set Max total charge in run options to cap a run. The Actor stops before the cap and keeps what it saved. ## Sample result ```json { "postId": "7954661391", "url": "https://www.craigslist.org/view/d/millbrae-twin-speed-cruiser-bike-too/2WS4Z9LeXGU7iV32nC6RR5", "title": "B-TWIN , 6 SPEED CRUISER BIKE , TOO CHEAP !!! .", "price": 20, "priceText": "$20", "currency": "USD", "city": "sfbay", "location": "millbrae", "latitude": 37.6004, "longitude": -122.402, "category": "bik", "categoryName": "bicycles - by owner", "sellerType": "owner", "postedAt": "2026-10-15T05:43:10.000Z", "images": ["https://images.craigslist.org/01616_c3M0s56xj4e_0CI0t2_600x450.jpg"], "imageCount": 4, "description": null, "attributes": null, "detailsStatus": "not_requested", "searchQuery": "bike", "fetchedAt": "2026-10-15T05:50:11.109Z" } ``` ## Similar tools - [AutoScout24 Scraper - EU Car Listings & Prices, No login](https://cliqtomedia.com/actors/car-listings-scraper/) - [Depop Scraper - Listings, Prices, Brands & Shops](https://cliqtomedia.com/actors/depop-scraper/) - [Kleinanzeigen Scraper: Listings, Prices & Photos (No Login)](https://cliqtomedia.com/actors/kleinanzeigen-scraper/) - [OLX Listings Scraper: Poland, Ukraine, Romania & More](https://cliqtomedia.com/actors/olx-listings-scraper/) - [Subito.it Scraper - Italy Classifieds & Prices, No Login](https://cliqtomedia.com/actors/subito-listings-scraper/) - [Vinted Scraper - Listings, Prices & Brands in 25 Countries](https://cliqtomedia.com/actors/vinted-scraper/) --- # Crypto Prices and OHLC History Export > Crypto price history export: current price, market cap and 24h volume, or OHLC candles from Binance, Kraken or CoinGecko. No login or API key. URL: https://cliqtomedia.com/actors/crypto-market-data/ Category: Finance, markets & sports · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/crypto-market-data?fpr=cliqto Choose coins and get their price, market cap and 24h volume. Or get candle history from Binance, Kraken or CoinGecko. No account or API key needed. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `bitcoin` in Coins. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Export crypto prices for the coins you choose: current price, market cap, 24h volume and 24h change, or OHLC candle history from Binance, Kraken or CoinGecko. No login and no API key. - `snapshot` — one row per coin with the current price, market cap, market cap rank, 24h volume, 24h change, 24h high and low, supply and all-time high. Data comes from the CoinGecko public API. You can list coins, take the top N coins by market cap, or both. - `history` — price history for each coin. With `binance` or `kraken` you get OHLC candles (open, high, low, close, volume) for `1h`, `4h`, `1d` or `1w`. With `coingecko` you get daily or hourly price, market cap and volume. ### Good for - Daily price and market cap table for a list of coins in a spreadsheet. - OHLC candles for charts, back-tests or reports, back to 2017 on Binance. - Top 100 coins by market cap, ready to export as CSV or Excel. ### Not a good fit - Not real-time. Prices are as fresh as the public API at run time (CoinGecko updates about every minute). Do not use it for trading signals. - Not investment advice. The Actor only copies public market data. - No order books, trades, wallets, DEX pools or derivatives. - Kraken keeps only about 720 recent candles per pair. Use `binance` for long history. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.0015 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Coin snapshot | $0.0003 (from $0.000255 on paid Apify plans) | One saved coin row with current price, market cap, 24h volume and 24h change (snapshot mode). | | History candle | $0.0001 (from $0.000085 on paid Apify plans) | One saved OHLC candle or history point for one coin (history mode). | | Coin lookup with no match | $0.0002 | One requested coin that matched no coin or trading pair. Covers the lookup requests. | - One coin snapshot: about $0.0018. - 1,000 coin snapshots: about $0.30. - Every day 100 coin snapshots, for 30 days: about $0.95 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/crypto-market-data?fpr=cliqto ## Questions ### Is the data live? No. You get prices from the public API at run time. Do not use it for trading signals. ### Is this investment advice? No. It only copies public market data. ### Does it include order books? No. Order books, trades, wallets and DEX pools are not included. ### How many coins can I get? Snapshot mode takes up to 250 coins plus the top 250. History mode takes up to 25 coins. ### Do I need an account or API key on CoinGecko, Binance or Kraken? No. The Actor uses public endpoints. No login, no API key. ### Is the data real-time? No. You get the values at run time. CoinGecko updates about every minute. The newest candle has `isClosed: false` and can still change. ### Why does my history have fewer rows than days × interval? The coin may be newer than your period, the exchange may not have old data, or `maxRows` stopped the run. Check `RUN_SUMMARY` for each coin. ### Where does the data come from? Data provided by CoinGecko, and public market data from Binance and Kraken. The Actor does not change the values; it only renames fields to one schema. ## Data fields - `recordType` (string): Row type: snapshot (current market data), candle (one history bar) or status (not_found / error for one input). - `status` (string): Row result: ok, partial (some values missing), not_found or error. See message. - `query` (string): Your coin entry as typed (lowercased), or null for topN rows. - `matchedBy` (string): How the coin was matched: id (CoinGecko ID), symbol (ticker, largest market cap wins), topN, or ticker (used as typed on the exchange). - `coin` (string): CoinGecko coin ID, e.g. bitcoin. - `symbol` (string): Ticker in upper case, e.g. BTC. - `name` (string): Coin name, e.g. Bitcoin. - `vsCurrency` (string): Quote currency you asked for, e.g. usd. - `price` (number): Snapshot: current price. Candle: close price. - `marketCap` (number): Market capitalisation in vsCurrency (snapshot; coingecko history at the close point). - `marketCapRank` (number): CoinGecko market cap rank. - `fullyDilutedValuation` (number): Fully diluted valuation in vsCurrency. - `volume24h` (number): Trading volume over the last 24 hours in vsCurrency. - `change24h` (number): Price change over 24 hours in vsCurrency. - `change24hPct` (number): Price change over 24 hours, percent. - `marketCapChange24hPct` (number): Market cap change over 24 hours, percent. - `high24h` (number): 24-hour high price. - `low24h` (number): 24-hour low price. - `circulatingSupply` (number): Circulating supply. - `totalSupply` (number): Total supply. - `maxSupply` (number): Maximum supply, null if unlimited or unknown. - `ath` (number): All-time high price. - `athChangePct` (number): Distance from the all-time high, percent. - `athDate` (string): All-time high date, ISO 8601. - `atl` (number): All-time low price. - `atlDate` (string): All-time low date, ISO 8601. - `image` (string): Coin logo URL from CoinGecko. - `exchange` (string): History source: binance, kraken or coingecko. - `pair` (string): Trading pair, e.g. BTCUSDT (Binance), XXBTZUSD (Kraken), bitcoin/usd (CoinGecko). - `quoteAsset` (string): Quote asset of the pair, e.g. USDT. Binance quotes usd in USDT. - `interval` (string): Candle interval: 1h, 4h, 1d or 1w. - `timestamp` (string): Snapshot: when CoinGecko last updated the price. Candle: candle open time. ISO 8601 UTC. - `timestampMs` (number): Same time as Unix milliseconds. - `open` (number): Candle open price. Coingecko history: CoinGecko price at the start of the interval. - `high` (number): Candle high price (null for coingecko history). - `low` (number): Candle low price (null for coingecko history). - `close` (number): Candle close price. Coingecko history: CoinGecko price at the next interval boundary, or the live price while isClosed is false; null if CoinGecko has no point there. - `volume` (number): Candle volume in the base coin (exchanges). - `quoteVolume` (number): Volume in the quote asset. Binance: candle quote volume from the exchange. Kraken: volume × VWAP of the candle. Coingecko history: rolling 24h volume across all markets at the close point (not a per-candle volume). - `trades` (number): Number of trades in the candle (exchanges). ## Input settings - `mode` (string): snapshot: one row per coin with current price, market cap, 24h volume and change (CoinGecko). history: OHLC candles for each coin from Binance, Kraken or CoinGecko. - `coins` (array): CoinGecko IDs (bitcoin, ethereum) or tickers (btc, eth, $sol). For a ticker shared by several coins the one with the largest market cap is used; check matchedBy and coin in the output. Up to 250 in snapshot mode, 25 in history mode. Duplicates are exported once. - `topN` (integer): Snapshot mode only: also export the top N coins by market cap (0–250). 0 = off. - `vsCurrency` (string): Currency for prices, e.g. usd, eur, gbp, jpy, btc. Snapshot and coingecko history accept 63 CoinGecko codes. Binance and Kraken history accept usd, eur, gbp, jpy, try, brl, aud, cad, chf, btc, eth, bnb, sol, xrp where the exchange lists the pair; Binance quotes usd in USDT. - `exchange` (string): History mode only. binance: OHLC back to 2017 (up to 1825 days). kraken: OHLC, latest 720 candles only. coingecko: price, market cap and 24h volume (no open/high/low), up to 365 days. - `interval` (string): History mode only: 1h, 4h, 1d or 1w. CoinGecko supports 1d, and 1h for up to 90 days. - `days` (integer): History mode only: how many days back from now (1–1825 for Binance and Kraken, 1–365 for CoinGecko). - `maxRows` (integer): History mode only: stop after this many candle rows in total (1–50000). Keeps cost predictable. ## Step by step on Apify 1. Open the Input tab. 2. Keep the prefilled `coins`: `bitcoin` and `ethereum`. Or add your own. 3. Keep `mode` = `snapshot`. 4. Click Start. 5. Open the Output tab and check the Prices (snapshot) view: `price`, `marketCap`, `volume24h`, `change24hPct`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Track prices of my coins every day | `coins`, `mode: snapshot` | coin snapshot | `price`, `marketCap`, `volume24h`, `change24hPct` | Google Sheets, CSV, scheduled run | | Top coins by market cap | `topN: 100` | coin snapshot | `marketCapRank`, `price`, `marketCap` | Excel, BI tool | | Candles for charts or back-tests | `mode: history`, `exchange: binance`, `interval`, `days` | OHLC candle | `timestamp`, `open`, `high`, `low`, `close`, `volume` | Python, pandas, database | | Long price and market cap history | `mode: history`, `exchange: coingecko`, `interval: 1d`, `days: 365` | history point | `timestamp`, `price`, `marketCap`, `volume` | Spreadsheet, chart | ## Tips - Use Binance for long history. It goes back to 2017. - Avoid Kraken for long periods. It keeps about 720 recent candles. - Schedule a daily snapshot run to build your own price table. ## Limits - Snapshot: up to 250 coins plus `topN` up to 250 per run. - History: up to 25 coins and 50,000 rows per run. Binance has data back to 2017, Kraken only about 720 recent candles, CoinGecko up to 365 days. - A run stops source work after about 4 minutes and keeps what it saved. ## Sample result ```json { "recordType": "snapshot", "status": "ok", "query": "bitcoin", "matchedBy": "id", "coin": "bitcoin", "symbol": "BTC", "name": "Bitcoin", "vsCurrency": "usd", "price": 82947, "marketCap": 1667051393162, "marketCapRank": 1, "volume24h": 32352326234, "change24h": 521.38, "change24hPct": 0.63249, "high24h": 84074, "low24h": 81018, "maxSupply": 21000000, "timestamp": "2026-10-13T17:53:53.000Z", "open": null, "close": null, "source": "coingecko", "sourceUrl": "https://www.coingecko.com/en/coins/bitcoin", "fetchedAt": "2026-10-13T17:55:08.988Z" } ``` ## Use it from code Actor ID: `cliqtomedia/crypto-market-data` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/crypto-market-data").call(run_input={ "mode": "snapshot", "coins": [ "bitcoin", "ethereum" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~crypto-market-data/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"mode": "snapshot", "coins": ["bitcoin", "ethereum"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/crypto-market-data") result = tool.invoke({"run_input": {"mode": "snapshot", "coins": ["bitcoin", "ethereum"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [SEC Form D Filing Monitor](https://cliqtomedia.com/actors/sec-edgar-form-d-funding-monitor/) - [Historical Exchange Rates & Currency Converter](https://cliqtomedia.com/actors/historical-fx-rates-converter/) - [Polymarket & Kalshi Prediction Market Data, No Login](https://cliqtomedia.com/actors/prediction-markets-data/) - [Tennis Scraper: ATP & WTA Matches, Players & Rankings](https://cliqtomedia.com/actors/tennis-stats-scraper/) --- # DataCite Research Dataset Search > DataCite API tool to search research datasets by topic, publisher, funder, year and license. Export DOI, creators, rights and citation counts. URL: https://cliqtomedia.com/actors/datacite-dataset-search/ Category: Science & research data · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Search DataCite for research datasets with simple filters. Get one row per DOI with title, creators and rights. Export it as a table for your work. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `climate temperature` in Search query. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Search DataCite for research datasets by topic, publisher, funder, publication year and license. The Actor returns one row per DOI with title, creators, rights, related identifiers and DataCite citation counts. ### Good for - Find datasets on a topic from 2020 to 2025 and export DOIs and titles. - Find datasets from one repository (for example Zenodo or Dryad) or one funder. - Check which datasets have an open license, such as `cc-by-4.0`. ### Not a good fit - It does not download dataset files. It returns metadata and links. - It returns at most 500 records per run, not the whole DataCite catalog. - DataCite only. Crossref DOIs (most journal articles) are not included. ## Price Prices will be shown after release. ## Questions ### Does it download the data files? No. It returns metadata and links only. ### Why do I see the same title twice? Each version can have its own DOI. Each DOI is a row. ### Does it include journal articles? No. Most journal articles use Crossref, not DataCite. ### Do I need a DataCite key? No. It uses the public DataCite REST API. ### Does `license` show every license? No. `license` is the first entry in `rights`. A record can have more, and the `license` filter can match a later one. Check `rights` for the full list. An empty `rights` list means the reuse terms are unknown, not that reuse is allowed. ### Is `citationCount` complete? No. It is the number DataCite reports from its own links. Other citation indexes can show more. ### How fresh is the data? Each run reads DataCite live. `sourceUpdatedAt` shows when DataCite last changed the record. ## Data fields - `doi` (string): DataCite DOI, for example 10.5281/zenodo.4006472. Unique within one run. - `doiUrl` (string): DOI resolver link: https://doi.org/ plus the DOI. - `provider` (string): Always DataCite. - `sourceUrl` (string): DataCite REST API record for this DOI. - `fetchedAt` (string): ISO 8601 UTC time when this Actor read the record. - `metadataLicense` (string): License of the metadata, always CC0-1.0. It is not the dataset license. - `title` (string): First title as plain text: HTML tags removed (also entity-encoded tags), entities such as & decoded, control characters dropped. Null if blank. Raw titles are in titles. - `publisher` (string): Publisher or repository name, for example Zenodo. Null if missing. - `resourceType` (string): General resource type, for example Dataset or Software. - `resourceTypeDetail` (string): Free-text resource type from the publisher. Null if missing or blank. - `url` (string): Landing page of the record at the publisher. Null if missing. - `license` (string): First rights identifier, URI or name from rights. Null if no rights. Other licenses can be in rights. - `sourceUpdatedAt` (string): ISO 8601 time when DataCite last updated the record. Null if missing. - `year` (number): Publication year as an integer. Null if missing. - `citationCount` (number): Citation count reported by DataCite. 0 is a real value; null if unknown. Not a full citation census. - `titles` (array): All title objects as DataCite returns them; may contain HTML and language tags. - `creators` (array): Creator objects with names, name type, identifiers such as ORCID and affiliations. Empty list if missing. - `subjects` (array): Subject objects (keywords and classification codes). Empty list if missing. - `rights` (array): All rights objects for the dataset: SPDX ID, URI and name. Empty list means unknown reuse rights. - `sizes` (array): Size strings as supplied, for example 2 files or 15 MB. Empty list if missing. - `formats` (array): Format strings as supplied, for example text/csv. Empty list if missing. - `relatedIdentifiers` (array): Links to related works: identifier, type and relation, for example IsCitedBy or IsVersionOf. Empty list if missing. - `fundingReferences` (array): Funding objects: funder name, funder ID and award. Empty list if missing. ## Input settings - `query` (string): Topic words or DataCite query syntax. Plain words must all match; use OR to match any word, quotes for a phrase. Blank searches all records with the filters. - `resourceTypeGeneral` (string): Filter resource type; Dataset by default. - `sortBy` (string): Relevance puts the best matches first. Newest and oldest sort by the date the DOI was created. - `publisher` (string): Exact phrase in the indexed publisher field, for example Zenodo or Dryad. - `funder` (string): Exact phrase in the indexed fundingReferences.funderName field. - `yearFrom` (integer): Inclusive lower publication year bound. - `yearTo` (integer): Inclusive upper publication year bound. - `license` (string): Match SPDX identifier, rights URI or license name phrase. Missing rights do not imply permission. - `maxResults` (integer): Maximum saved records, 1–500. Search total is reported separately in RUN_SUMMARY. ## Step by step on Apify 1. Open the Input tab. 2. Keep the example in Search query: `climate temperature`. 3. Keep Resource type = `Dataset`, years 2020–2025 and Maximum results = 25. 4. Click Start. 5. Open the Research datasets view in the Output tab and check the first DOI and title. ## Tips - Filter by publisher, like Zenodo or Dryad, to see one repository. - Check the rights list, not only the first license. - One run gives up to 500 records. Split big topics by year. ## Limits - 1–500 rows per run, 50 rows per source page, at most 12 pages. - Each request has 15 seconds. Temporary 429 and 5xx errors get up to three attempts. All source work stops after 150 seconds. - Runs use 256 MB and a 300-second timeout. A larger timeout does not add more source work. - Rows are saved one source page at a time. If the run restarts (for example after Apify moves it to another server, or after a resurrect), it first reads the DOIs already in its Dataset and skips them, so a row is not saved twice and is not charged again. Tested on Apify with a run restarted through the API in the middle of a page and with a resurrected finished run; the platform's own move to another server is covered by automated tests only. - The source limits count across all processes of a run: 150 seconds of source time, 18 requests and 6 MiB of responses in total. A restarted or manually resurrected run continues with the requests and time it has already used, so it can end `partial` with `SOURCE_BUDGET_EXHAUSTED` or `PAGINATION_BUDGET` sooner than a new run would. - While a move to another server is in progress, the summary shows `MIGRATING`. The run waits at most 90 seconds in total (shared by all its processes) to be restarted; if it is not, it ends as Failed with `MIGRATION_FAILED` and keeps the saved rows. - A run uses at most 3 processes (the first start plus two restarts). A 4th start stops at once with `RESTART_LIMIT`, without requests, new rows or row charges; the saved rows are kept. - A resurrected finished run repeats its last summary and saves and charges no new rows; Apify still charges the start fee for the new start. This includes a run stopped by your spending limit (`partial` `CHARGE_LIMIT`): a resurrect does not continue it, even with a higher limit. To get more records, start a new run with a higher limit. A run stopped before it finished (aborted, or ended with `MIGRATION_FAILED`) continues where it stopped when resurrected, within the shared limits above. ## Sample result ```json { "doi": "10.5281/zenodo.4006472", "title": "FYRE Climate: Temperature", "creators": [{ "name": "Author, Example", "nameType": null }], "publisher": "Zenodo", "year": 2020, "resourceType": "Dataset", "resourceTypeDetail": null, "subjects": [{ "subject": "climate" }], "license": "cc-by-sa-4.0", "rights": [{ "rightsIdentifier": "cc-by-sa-4.0", "rights": "Creative Commons Attribution Share Alike 4.0 International", "rightsUri": "https://creativecommons.org/licenses/by-sa/4.0/legalcode" }], "url": "https://zenodo.org/record/4006472", "doiUrl": "https://doi.org/10.5281/zenodo.4006472", "citationCount": 3, "provider": "DataCite", "sourceUrl": "https://api.datacite.org/dois/10.5281%2Fzenodo.4006472", "fetchedAt": "2026-10-13T04:16:15.078Z", "sourceUpdatedAt": "2024-10-06T08:55:31Z", "metadataLicense": "CC0-1.0" } ``` ## Similar tools - [Google Patent Details Scraper](https://cliqtomedia.com/actors/google-patents-scraper/) - [DOI Metadata & Bibliography Enrichment](https://cliqtomedia.com/actors/doi-bibliography-enrichment/) - [ClinicalTrials.gov Studies Search & Monitor](https://cliqtomedia.com/actors/clinicaltrials-gov-studies-monitor/) - [Europe PMC Literature Search & Monitor](https://cliqtomedia.com/actors/europe-pmc-literature-search/) - [GBIF Biodiversity Occurrence Search](https://cliqtomedia.com/actors/gbif-occurrence-search/) - [Google Scholar Search Scraper - Citations & PDFs, No Login](https://cliqtomedia.com/actors/google-scholar-scraper/) --- # Depop scraper for listings, prices and shops > Depop scraper for listings by search or by shop. Get price, brand, size, condition, likes, sold status and photos. Filter by brand and size. No login. URL: https://cliqtomedia.com/actors/depop-scraper/ Category: Classifieds & second-hand · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/depop-scraper?fpr=cliqto Search Depop by keyword, or add shop names. You get one row per listing with price, brand, size, condition and sold status. Filter by brand, size and price. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `vintage nike` in Search queries. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Depop Scraper collects listings from Depop, the second-hand fashion marketplace. Add a search query or a shop username, and you get one row per listing with price, brand, size, condition, likes, sold status, photos and seller. No Depop account or login is needed. - Search mode — the listings Depop shows for your keywords, like the search box on depop.com. - Shop mode — the listings of one or more Depop shops, by username or shop link. ### Good for - Track prices of a brand or item type, for example vintage Nike jackets in size M under $50. - Check what a shop sells, how items are priced and which items are already sold. - Collect listing photos, brands and sizes for resale research or price comparison. ### Not a good fit - No login: the Actor does not read messages, orders, offers, private data or seller contact details. - Listing dates are not available without login: `createdAt` is always `null`. - Search returns the listings Depop shows for a query. It is not a full export of all Depop listings. - Seller usernames in Search mode are optional and cost extra (see `includeSellerDetails`). ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.004 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Listing | $0.0015 (from $0.0012 on paid Apify plans) | One Depop listing saved to the dataset. | | Seller username | $0.0015 | Seller username, shop link and verified badge read from the listing page (Search mode, only when turned on). | - One result: about $0.0055. - 1,000 results: about $1.50. - Every day 100 results, for 30 days: about $4.62 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/depop-scraper?fpr=cliqto ## Questions ### Is this the Depop API? No. Depop's Partner API needs a key. This tool reads public listings. ### Why is the listing date empty? Depop hides dates from logged-out visitors. The tool does not guess. ### Do I pay for filtered listings? No. Only saved listings are charged. ### Which countries can I search? US, UK, Australia, Canada, Germany, France, Italy and Ireland. ### Do I need a Depop account? No. The Actor reads only public listings and does not log in. ### Why is `createdAt` always null? Depop does not show the listing date to logged-out visitors. The Actor keeps the field `null` instead of guessing. ### Why is `sellerUsername` empty in Search mode? Depop search results carry only the seller's numeric id (`sellerId`). Turn on `includeSellerDetails` to add the username, or use Shop mode. ### Do I pay for listings that do not match my filters? No. Only saved listings are charged. Filtered and duplicate rows are free. ### Are prices and sold status live? They are what Depop showed at `fetchedAt`. Prices and status can change at any time. ## Data fields - `id` (integer): Depop product id. - `slug` (string): Product slug, the last part of the listing link. - `url` (string): Listing page on depop.com. - `title` (string): Depop has no title field: the first line of the description, up to about 100 characters. - `description` (string): Full listing description as the seller wrote it. - `price` (number): Current item price in `currency`, without shipping. - `originalPrice` (number): Price before the reduction when `isReduced` is true. - `isReduced` (boolean): The seller has cut the price. - `currency` (string): ISO currency code of the chosen marketplace, e.g. USD, GBP. - `shippingPrice` (number): Shipping price Depop shows with the search result; null when not shown. - `brand` (string): Brand name, e.g. Nike. - `brandId` (integer): Depop's numeric brand id. - `size` (string): Size label(s), comma-separated when the listing has several. - `sizes` (array): All size labels of the listing. - `condition` (string): brand_new, used_like_new, used_excellent, used_good or used_fair. - `category` (string): Depop category name. - `productType` (string): Product type, e.g. tshirts, jeans. - `gender` (string): Department: male, female or null. - `colours` (array): Colours the seller chose. - `styles` (array): Style tags the seller chose. - `sellerId` (integer): Seller's numeric Depop id. - `sellerUsername` (string): Seller username. Always set in Shop mode; in Search mode only with "Add seller username". - `sellerUrl` (string): Seller shop link. - `sellerVerified` (boolean): Seller has the Depop verified badge; null when not fetched. - `likes` (integer): Number of likes. - `sold` (boolean): The listing is no longer on sale (sold or reserved). - `status` (string): Depop's raw status, e.g. STATUS_ONSALE. - `quantity` (integer): Quantity listed. - `photo` (string): Main photo link. - `photos` (array): All photo links, largest size Depop serves. - `isBoosted` (boolean): Promoted (boosted) listing. - `country` (string): Country the listing ships from. - `createdAt` (null): Always null: Depop does not give the listing date to logged-out visitors. - `sellerDetailsFetched` (boolean): Seller username and badge are filled in. - `mode` (string): search or shop. - `searchQuery` (string): Query that found the listing (Search mode). - `shopUsername` (string): Shop the listing was taken from (Shop mode). - `position` (integer): Position within its query or shop, from 1. - `fetchedAt` (string): When the Actor read the listing (ISO 8601, UTC). ## Input settings - `mode` (string): Search = listings Depop finds for your keywords. Shop = listings of the given Depop shops. - `queries` (array): Keywords as you would type them on Depop, one search per line, up to 50. Used in Search mode. - `shopUsernames` (array): Depop usernames or shop links (https://www.depop.com/username/), up to 50. Used in Shop mode. - `maxItems` (integer): Stop each query or shop after this many saved listings. Each saved listing is one paid result. - `brand` (string): Keep only this brand, e.g. Nike. The Actor looks up Depop's brand filter for this name; if Depop does not know the brand, rows are matched by brand name. In Search mode without queries, the brand itself is searched. - `size` (string): Keep only listings with this size label as Depop shows it, e.g. M, US 9, 32 (jeans waist). Case, spaces and inch marks are ignored; W32 equals 32, and a bare number like 9 also matches US 9, UK 9 or EU 9. - `priceMin` (number): Lowest item price in the marketplace currency, without shipping. - `priceMax` (number): Highest item price in the marketplace currency, without shipping. - `conditions` (array): Keep only these conditions. Empty = any condition. - `sort` (string): Order of search results. - `country` (string): Depop marketplace to search; prices come in its currency. - `includeSellerDetails` (boolean): Search results carry only the seller's numeric id. On = open each listing page to add the seller's username, shop link and verified badge. Slower, and each enriched listing is one extra paid event. Shop mode always has the seller. ## Step by step on Apify 1. Open the Input tab. 2. Keep What to scrape (`mode`) as Search results. 3. Add a keyword to Search queries (`queries`), for example `vintage nike`. The form already has it. 4. Keep Max listings per query or shop (`maxItems`) at 20 for a first test. 5. Click Start. 6. Open the Output tab. The Overview table shows photo, title, price, brand, size, condition, likes, sold and link. ## Use cases | Goal | Input | Key fields | Next step | |---|---|---|---| | Price research for resale | `queries`, `size`, `priceMin`/`priceMax`, `sort` | `price`, `originalPrice`, `condition`, `likes`, `sold` | Export CSV or Excel and compare prices | | Watch a brand | `brand`, `conditions` | `brand`, `price`, `size`, `url`, `fetchedAt` | Run on a schedule and compare runs | | Check a shop | `mode: shop`, `shopUsernames` | `price`, `sold`, `likes`, `category` + shop numbers in `RUN_SUMMARY` | Track stock and prices over time | | Find sellers for an item | `queries`, `includeSellerDetails: true` | `sellerUsername`, `sellerUrl`, `sellerVerified` | Open the shop link | ## Tips - Pick the right marketplace country before you start. - Use shop mode to get seller names for free. - Avoid rare filter mixes. The run stops a query with very few matches. ## Limits - Run time: about 1,300 search listings take around 2–3 minutes. With `includeSellerDetails`, about 2 listings per second: 100 listings took under a minute in our test. The default timeout is 30 minutes; if time runs out, the run ends with `PARTIAL` and reason `TIME_LIMIT` and keeps what it saved. - Page limit: at most 250 result pages (about 6,000 listings) per query or shop (`PAGE_LIMIT`). The largest run we tested saved 1,300 listings; bigger runs were not tested. - Slow product pages: each Depop request waits at most 20 seconds. If product pages answer too slowly, seller details stop: the remaining listings are saved without a seller username, are not charged for `seller-details`, and are counted in `counts.sellerDetailsSkipped` with a warning in `RUN_SUMMARY`. - Few results (`LOW_YIELD`): a run reads up to 5 search pages (or 2 shop pages) for free, plus 2 search pages for each saved listing. If pages keep giving almost nothing — typos, a size nobody sells, many overlapping queries — the run stops and the remaining queries or shops are `skipped`. For example, when the first two shops are not found, later shops are skipped. - Rare filter (`SPARSE_FILTER`): after 10 pages, a query whose filters keep fewer than 1 in 100 listings is stopped, and the run moves to the next query. - Shop mode: the Actor finds a shop's listings through Depop search for the username and keeps only that shop's items. It stops after 3 pages in a row without the shop's items. In our tests it returned all listings shown on the shop page, but very large shops may be incomplete. - Duplicates: a listing found again in the same run is not saved again and not charged. ## Sample result ```json { "id": 952642444, "slug": "example_seller-mens-medium-vintage-nike-track-156f", "url": "https://www.depop.com/products/example_seller-mens-medium-vintage-nike-track-156f/", "title": "Men’s medium vintage Nike track pants", "description": "Men’s medium vintage Nike track pants\nRip on waist but has been sewed", "price": 25, "originalPrice": 25, "isReduced": false, "currency": "USD", "shippingPrice": 3.99, "brand": "Nike", "brandId": 270, "size": "M", "sizes": ["M"], "condition": "used_fair", "category": "Joggers", "productType": "joggers-tracksuits", "gender": "male", "colours": ["navy", "black"], "styles": [], "sellerId": 12345678, "sellerUsername": null, "sellerUrl": null, "sellerVerified": null, "likes": 34, "sold": false, "status": "STATUS_ONSALE", "quantity": 1, "photo": "https://media-photos.depop.com/r1/12345678/1234567890_0123456789abcdef0123456789abcdef/P0.jpg", "photos": ["https://media-photos.depop.com/r1/12345678/1234567890_0123456789abcdef0123456789abcdef/P0.jpg"], "isBoosted": false, "country": "US", "createdAt": null, "sellerDetailsFetched": false, "mode": "search", "searchQuery": "vintage nike", "shopUsername": null, "position": 2, "fetchedAt": "2026-10-15T02:32:21.242Z" } ``` ## Use it from code Actor ID: `cliqtomedia/depop-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/depop-scraper").call(run_input={ "mode": "search", "queries": [ "vintage nike" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~depop-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"mode": "search", "queries": ["vintage nike"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/depop-scraper") result = tool.invoke({"run_input": {"mode": "search", "queries": ["vintage nike"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [AutoScout24 Scraper - EU Car Listings & Prices, No login](https://cliqtomedia.com/actors/car-listings-scraper/) - [Kleinanzeigen Scraper: Listings, Prices & Photos (No Login)](https://cliqtomedia.com/actors/kleinanzeigen-scraper/) - [OLX Listings Scraper: Poland, Ukraine, Romania & More](https://cliqtomedia.com/actors/olx-listings-scraper/) - [Subito.it Scraper - Italy Classifieds & Prices, No Login](https://cliqtomedia.com/actors/subito-listings-scraper/) - [Craigslist Scraper - Listings, Prices & Photos, No Login](https://cliqtomedia.com/actors/craigslist-scraper/) - [Vinted Scraper - Listings, Prices & Brands in 25 Countries](https://cliqtomedia.com/actors/vinted-scraper/) --- # DOI Metadata and Bibliography Enrichment > Bulk DOI lookup for citation metadata from Crossref, DataCite and JaLC. Get title, authors, journal, dates, pages, ISSN and license. No key. URL: https://cliqtomedia.com/actors/doi-bibliography-enrichment/ Category: Science & research data · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/doi-bibliography-enrichment?fpr=cliqto Paste a list of DOIs and get one clean citation record each. The tool asks the right agency for each DOI. Bad or unknown DOIs get a clear status. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `10.1038/nature12373` in DOIs. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Paste a list of DOIs and get one clean citation record per DOI. This bulk DOI metadata lookup checks each DOI at doi.org, reads the metadata from the official Crossref, DataCite or JaLC API, and returns title, authors, journal or book, exact dates, volume, pages, ISSN/ISBN, license and citation counts. - Cleans your input. It accepts `10.…`, `doi:10.…`, `https://doi.org/10.…` and `dx.doi.org` links, in any letter case. - Asks doi.org which agency registered each DOI. - Reads the record from that agency: Crossref (most journals and books), DataCite (datasets, software, repositories) or JaLC (Japan). - Writes one Dataset row for each input value, in your input order, with a clear `status`. ### Good for - Turn a list of DOIs into a table of titles, authors, journals, years and pages. - Check a reference list: find DOIs that are not registered or have a typo. - Add ISSN, ISBN, publisher, license and citation counts to a list of papers. - Mix journal articles and research datasets in one run (Crossref and DataCite). ### Not a good fit - No search by title or author. You need the DOI. - No PDFs, full text or abstracts. The Actor reads only bibliographic metadata. - No Open Access links (for example from Unpaywall). - DOIs from other agencies (for example mEDRA) are only identified. The row has `status: unsupported_agency` and the agency name, but no title or authors. - No BibTeX or RIS file. You get structured fields that you can export as JSON, CSV or Excel. - Up to 500 DOIs per run. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.001 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | DOI metadata record | $0.0018 (from $0.0015 on paid Apify plans) | One unique DOI with a metadata row saved to the Dataset: a complete row, or a partial row that has metadata but no title (NO_TITLE). Repeated DOIs are free. | | DOI check without metadata | $0.0005 | One unique DOI checked without metadata: doi.org reports it as not registered, it belongs to an agency this Actor does not read, or the agency has no record yet (not_found, unsupported_agency or RECORD_NOT_INDEXED row). | - One DOI record: about $0.0028. - 1,000 DOI records: about $1.80. - Every day 100 DOI records, for 30 days: about $5.43 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/doi-bibliography-enrichment?fpr=cliqto ## Questions ### Can I search by title? No. You need the DOI. ### Does it give abstracts or PDFs? No. It gives bibliographic metadata only. ### Why is a date only a year? The tool keeps the source precision. It does not add a fake day. ### Why is my citation count lower than Google Scholar? It is the count from Crossref or DataCite. Other indexes count other sources. ### Do I need an API key? No. Crossref, DataCite, JaLC and doi.org are open. You only need your Apify account. ### Why is `citedByCount` different from Google Scholar? It is the count known to the registration agency (Crossref or DataCite). Other indexes count different sources. ### How fresh is the data? Each run reads the sources live. Each row has `fetchedAt` (our read time) and `sourceUpdatedAt` (when the agency last updated the record). ## Data fields - `input` (string): Your input value exactly as given. - `doi` (string): Canonical DOI in lower case (DOIs are case-insensitive); null for invalid input. - `doiUrl` (string): Resolvable https://doi.org/ link. - `status` (string): complete: metadata found. partial: DOI exists but the record is missing or has no title. not_found: doi.org says the DOI is not registered. invalid: not a DOI. unsupported_agency: registered with another agency (agency is given). error: a source failed; existence unknown. - `statusReason` (string): Plain-English explanation for any status other than complete. - `agency` (string): Registration agency from doi.org: Crossref, DataCite, JaLC, mEDRA, … - `type` (string): Work type as the agency names it, e.g. journal-article, book-chapter, proceedings-article, dataset. - `resourceTypeGeneral` (string): DataCite general resource type, e.g. Dataset, Software, Text. - `title` (string): Title with markup removed and HTML entities decoded. - `subtitle` (string): Subtitle, if the record has one. - `authors` (array): Authors in record order: given, family, full name, ORCID URL (only when the source lists it), affiliations. - `editors` (array): Editors, same shape as authors. - `containerTitle` (string): Journal, book or proceedings that contains the work (for a book chapter, the book). - `containerTitles` (array): All container titles exactly as the agency lists them. - `seriesTitle` (string): Book series, e.g. Use R!, when the record lists one. - `publisher` (string): Publisher. - `issuedDate` (string): Publication date at the precision the source gives: 2016, 2013-08 or 2013-07-31. Never padded. - `publishedOnlineDate` (string): Online publication date (Crossref), same precision rule. - `publishedPrintDate` (string): Print publication date (Crossref), same precision rule. - `publicationYear` (integer): Publication year. - `volume` (string): Volume. - `issue` (string): Issue. - `pages` (string): Page range, e.g. 54-58. - `articleNumber` (string): Article number for journals without page numbers. - `issn` (array): ISSNs with type print/electronic when known. - `isbn` (array): ISBNs with type print/electronic when known. - `licenses` (array): License statements from the record (Crossref license / DataCite rightsList). - `referencesCount` (integer): Number of references deposited with the record. - `citedByCount` (integer): Citations known to the agency (Crossref is-referenced-by-count / DataCite citationCount). - `language` (string): Language code when the record states it (DataCite, JaLC; not returned by Crossref batch queries). - `landingUrl` (string): Publisher landing page registered for the DOI. - `sourceUpdatedAt` (string): When the agency last indexed or updated the record. - `authorsCount` (integer): Number of authors. - `provider` (string): API the row came from. - `sourceUrl` (string): API request the metadata was read from. - `fetchedAt` (string): When this row was produced (ISO 8601). - `errorCode` (string): Machine code: INVALID_DOI, DOI_NOT_REGISTERED, UNSUPPORTED_AGENCY, RECORD_NOT_INDEXED, NO_TITLE, SOURCE_UNAVAILABLE, RATE_LIMITED, DEADLINE_REACHED, … ## Input settings - `dois` (array, required): Up to 500 DOIs per run, one per line. Accepted forms: 10.1038/nature12373, doi:10.1038/nature12373, https://doi.org/10.1038/nature12373, dx.doi.org links and percent-encoded links. Case does not matter; a repeated DOI gets its own row but is charged once. Values that are not DOIs get an invalid row and are free. - `contactEmail` (string): Optional. Your own email, sent only to Crossref, DataCite and doi.org in the request User-Agent ("mailto"), as they ask of heavy users. Crossref uses it to put requests in its polite pool. It is never logged or written to the output. ## Step by step on Apify 1. Open the Input tab. 2. Keep the three example DOIs in DOIs (`dois`) or paste your own, one per line. 3. Leave Contact email empty, or add your own email for large runs. 4. Click Start. 5. Open the Output tab, view Citations. Check `status` and `title` in the first row. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Build a reference table | `dois` | One citation record per DOI | `title`, `authors`, `containerTitle`, `issuedDate`, `pages` | Export CSV/Excel, or read the Dataset by API | | Clean a bibliography | `dois` | Status per DOI | `status`, `statusReason`, `errorCode`, `doi` | Filter rows where `status` is not `complete` | | Enrich a paper list | `dois` | Identifiers and counts | `issn`, `isbn`, `publisher`, `licenses`, `citedByCount` | Join on `doi` (always lower case) | | Catalogue research data | `dois` | DataCite dataset record | `resourceTypeGeneral`, `publisher`, `publicationYear`, `language` | Export or API | ## Tips - Paste DOIs in any form, like doi: or a doi.org link. - Filter rows that are not complete to clean your list. - Join on the DOI column. It is always lower case. ## Limits - Up to 500 DOIs per run. In tests, 500 DOIs finished in about 24 seconds and 100 DOIs in about 6 seconds. - The Actor reads sources for up to 240 seconds. DOIs not processed in time get a free `error` row with `DEADLINE_REACHED`. - It sends batch requests (up to 50 DOIs each) and retries temporary failures. It respects source rate limits. ## Sample result ```json { "input": "10.1038/nature12373", "doi": "10.1038/nature12373", "doiUrl": "https://doi.org/10.1038/nature12373", "status": "complete", "statusReason": null, "agency": "Crossref", "type": "journal-article", "title": "Nanometre-scale thermometry in a living cell", "authors": [ { "given": "G.", "family": "Kucsko", "name": "G. Kucsko", "orcid": null, "affiliations": [] } ], "containerTitle": "Nature", "publisher": "Springer Science and Business Media LLC", "issuedDate": "2013-07-31", "publishedPrintDate": "2013-08", "publicationYear": 2013, "volume": "500", "issue": "7460", "pages": "54-58", "issn": [ { "value": "0028-0836", "type": "print" }, { "value": "1476-4687", "type": "electronic" } ], "authorsCount": 8, "provider": "Crossref REST API", "errorCode": null } ``` ## Use it from code Actor ID: `cliqtomedia/doi-bibliography-enrichment` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/doi-bibliography-enrichment").call(run_input={ "dois": [ "10.1038/nature12373", "10.5061/dryad.8515", "10.1007/978-3-319-24277-4_9" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~doi-bibliography-enrichment/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"dois": ["10.1038/nature12373", "10.5061/dryad.8515", "10.1007/978-3-319-24277-4_9"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/doi-bibliography-enrichment") result = tool.invoke({"run_input": {"dois": ["10.1038/nature12373", "10.5061/dryad.8515", "10.1007/978-3-319-24277-4_9"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [Google Patent Details Scraper](https://cliqtomedia.com/actors/google-patents-scraper/) - [ClinicalTrials.gov Studies Search & Monitor](https://cliqtomedia.com/actors/clinicaltrials-gov-studies-monitor/) - [DataCite Research Dataset Search](https://cliqtomedia.com/actors/datacite-dataset-search/) - [Europe PMC Literature Search & Monitor](https://cliqtomedia.com/actors/europe-pmc-literature-search/) - [GBIF Biodiversity Occurrence Search](https://cliqtomedia.com/actors/gbif-occurrence-search/) - [Google Scholar Search Scraper - Citations & PDFs, No Login](https://cliqtomedia.com/actors/google-scholar-scraper/) --- # Bulk WHOIS lookup with RDAP and live DNS records > Bulk WHOIS lookup with RDAP and DNS records. Get registrar, creation and expiry dates, nameservers and MX records for up to 5,000 domains. No API key. URL: https://cliqtomedia.com/actors/domain-whois-dns-lookup/ Category: Leads, companies & validation · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/domain-whois-dns-lookup?fpr=cliqto Paste a list of domains. For each one, you get registrar, dates and days until expiry from the official registry. You also get live DNS records in the same row. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `apify.com` in Domains. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Check a list of domain names and get WHOIS-style registration data from the official registry RDAP service, plus live DNS records, in one row per domain. You get the registrar, creation and expiry dates, days until expiry, status codes, nameservers, DNSSEC and A, AAAA, MX, NS, TXT, CNAME, SOA or CAA records. No login and no API key. - RDAP, the modern replacement of WHOIS. It asks the registry of the domain's top-level domain (for example Verisign for `.com`, Public Interest Registry for `.org`, Nominet for `.uk`). The server is found in the IANA RDAP bootstrap file. - DNS over HTTPS, from Google Public DNS or Cloudflare 1.1.1.1. If one fails, the other is tried. ### Good for - Find domains that expire soon in a portfolio (`expiresAt`, `daysUntilExpiry`). - Check which registrar and nameservers a list of domains uses. - Check mail and verification setup (MX, TXT with SPF, CAA) for many domains at once. - Check whether domain names are registered (`registered`, `not_found`). ### Not a good fit - No registrant data. The Actor never reads the owner's name, address, e-mail or phone. Registries hide most of it anyway. - No port 43 WHOIS. Some country-code registries have no public RDAP service, for example `.it`, `.es`, `.ru`, `.jp`, `.se`, `.dk`, `.so`. For these you get DNS records and `rdapStatus: rdap_unavailable`, not registration data. - Some registries share little. For example DENIC (`.de`) does not publish the registrar or expiry date. These fields are `null` then. - Best effort. Data comes from public services as they answer at run time. We do not promise that every field is present or correct. - Not for spam. Registry terms (for example Verisign and PIR) forbid using this data for mass advertising or unsolicited e-mail. Use it for your own domains, research or security work. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.0005 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Domain lookup | $0.0015 (from $0.0013 on paid Apify plans) | One checked domain saved to the Dataset with status complete, partial or not_found. Rows with status error, invalid inputs and duplicates are not charged. | - One domain: about $0.002. - 1,000 domains: about $1.50. - Every day 100 domains, for 30 days: about $4.51 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/domain-whois-dns-lookup?fpr=cliqto ## Questions ### Is RDAP the same as WHOIS? RDAP is the official successor of WHOIS. It gives the same facts in clean JSON. ### Do I get the owner's name or email? No. The tool never collects owner data. Most registries hide it anyway. ### Why is there no expiry date for some domains? Some registries share little, or run no public RDAP. You still get DNS records. ### Do I need a WHOIS API key? No. RDAP and DNS over HTTPS are public. You only need an Apify account. ### Why do I not get the owner's name or e-mail? The Actor does not collect personal data of registrants. Most registries hide it for privacy reasons anyway. ### How fresh is the data? Each row is checked live at `checkedAt`. Registry data can lag behind registrar changes by a short time; `rdapDatabaseUpdatedAt` shows when the registry last refreshed it. ## Data fields - `input` (string): The value as given in the input, before normalisation. - `domain` (string): Registrable domain that was checked (lowercase ASCII/punycode), e.g. example.co.uk. - `tld` (string): Top-level domain whose registry was asked, e.g. com, uk, de. - `lookupStatus` (string): complete = every requested part answered; partial = some data returned but a part failed or the registry has no RDAP; not_found = the registry says the domain is not registered (or, with RDAP off, DNS answers NXDOMAIN); error = nothing usable (not charged). - `registered` (boolean): true when the registry RDAP returned the domain, false when it answered 404 (not registered), null when unknown (RDAP off, unavailable or failed). DNS alone never sets this. - `rdapStatus` (string): Outcome of the RDAP part: found, not_found (404), rdap_unavailable (the TLD has no public RDAP service known to the Actor), error, or skipped (RDAP off). - `registrar` (string): Sponsoring registrar name from RDAP. - `registrarIanaId` (string): Registrar IANA ID (gTLDs). - `registrarUrl` (string): Registrar website from RDAP, when published. - `registrarAbuseEmail` (string): Registrar abuse-contact mailbox when it is a role address (abuse@, support@, ...); any other address is dropped. - `createdAt` (string): Registration date (ISO 8601, UTC). - `updatedAt` (string): Last change of the registration (ISO 8601, UTC). - `expiresAt` (string): Expiry date (ISO 8601, UTC). Many ccTLD registries do not publish it: null then. - `daysUntilExpiry` (integer): Whole days from checkedAt to expiresAt; negative when already past. null when expiresAt is unknown. - `domainAgeDays` (integer): Whole days since createdAt. null when createdAt is unknown. - `status` (array): EPP / RDAP status values, lowercase, e.g. client transfer prohibited. - `nameservers` (array): Delegated nameservers according to the registry (RDAP). - `dnssec` (boolean): true/false when the registry states whether the delegation is DNSSEC-signed; null when not stated. - `rdapServer` (string): RDAP base URL used for the TLD. - `rdapServerSource` (string): Where the RDAP server came from: the IANA bootstrap file, or a registry endpoint verified by the Actor author but not yet listed by IANA. - `rdapUrl` (string): Exact RDAP URL that was requested (open it to see the source record). - `registrarRdapUrl` (string): Link to the registrar's own RDAP record of the domain, when the registry publishes one. - `rdapDatabaseUpdatedAt` (string): When the registry last refreshed its RDAP database (ISO 8601). - `dnsResponseCode` (string): DNS response code: NOERROR (name exists), NXDOMAIN (name does not exist in DNS), SERVFAIL, REFUSED. null when DNS is off or failed. - `dns` (object): Records per requested type, e.g. {"A": ["1.2.3.4"], "MX": ["10 mx.example.com"]}. Empty list = no records of that type; null = that query failed. MX values are "priority host" ("0 ." = null MX: the domain accepts no mail); TXT strings are joined and unquoted. - `dnsResolver` (string): Resolver that answered. - `error` (string): What failed, per part (RDAP: ... | DNS: ...). null when nothing failed. - `errorCode` (string): Machine-readable code of the first failure, e.g. RDAP_NOT_AVAILABLE, RATE_LIMITED, SOURCE_UNAVAILABLE, SOURCE_TIMEOUT. - `checkedAt` (string): When the lookup started (ISO 8601, UTC). - `source` (string): Sources used for this row: RDAP (domain registry), DNS-over-HTTPS, or both. ## Input settings - `domains` (array, required): Up to 5,000 domain names or URLs, one per line (e.g. apify.com, https://www.example.org/page). Subdomains and paths are reduced to the registrable domain (www.shop.example.co.uk becomes example.co.uk); duplicates are checked once; invalid values are listed in RUN_SUMMARY and not charged. - `includeRdap` (boolean): Registrar, IANA ID, creation, update and expiry dates, EPP status, nameservers and DNSSEC from the registry's RDAP server. Registrant names and emails are never collected. Some country-code registries (e.g. .it, .eu, .ru) run no public RDAP service; those rows get rdapStatus rdap_unavailable instead of guessed data. - `includeDns` (boolean): Live DNS records of the domain from public DNS-over-HTTPS resolvers. - `recordTypes` (array): Which record types to resolve when DNS records are on. Each type is one DNS query per domain. - `dnsResolver` (string): Public DNS-over-HTTPS resolver asked first; the other one is used when it fails. ## Step by step on Apify 1. Open the Input tab. 2. Put your domains in Domains (`domains`), one per line. The field is prefilled with four examples. 3. Keep the defaults: RDAP on, DNS on, record types A, AAAA, MX, NS, TXT, Google resolver. 4. Click Start. 5. Open the Output tab and the dataset table. The table has three views: 6. Domains — status, registrar, dates and nameservers; 7. DNS records — DNS response code and records by type; 8. Registry details — registrar IDs, RDAP sources and links. ## Use cases | Task | Input | Key fields | Next step | |---|---|---|---| | Expiry watch for a domain portfolio | `domains` | `expiresAt`, `daysUntilExpiry`, `registrar` | Sort by `daysUntilExpiry`; run on a schedule | | Registrar and DNS audit | `domains`, `recordTypes` | `registrar`, `nameservers`, `dns.NS`, `dnssec` | Export to CSV or Excel | | E-mail setup check | `includeRdap: false`, `recordTypes: ["MX","TXT"]` | `dns.MX`, `dns.TXT` | Filter rows with empty `dns.MX` | | Is this name registered? | `domains` | `registered`, `lookupStatus` | Keep rows with `not_found` | ## Tips - Sort by daysUntilExpiry to see urgent renewals first. - Pick only the DNS record types you need. Each type is one query. - Long .ch or .uk lists can be slow. Split them into smaller runs. ## Limits - Up to 5,000 unique domains per run. For more, split the list into several runs. - The Actor keeps request rates low for each registry (at most 10 requests per second to Verisign) and waits when a server asks it to slow down. - Some registries limit RDAP on their side. SWITCH (`.ch`) answered only about 40–70 lookups in a row in our tests and then returned rate-limit errors; Nominet (`.uk`) allows about 2 lookups per second and a daily maximum. The Actor slows down for these registries, but long `.ch` or `.uk` lists can get rows with `errorCode: RATE_LIMITED` or `HOST_CIRCUIT_OPEN`. Such a row still has its DNS records and is `partial`. - Measured on 256 MB with a mixed list (mostly `.com`, `.net`, `.org`): 2,000 domains took about 9 minutes and 5,000 domains about 22 minutes. Lists with many `.ch` or `.uk` domains run slower because of the registry limits above. The default timeout is 1 hour. ## Sample result ```json { "input": "apify.com", "domain": "apify.com", "tld": "com", "lookupStatus": "complete", "registered": true, "rdapStatus": "found", "registrar": "Amazon Registrar, Inc.", "registrarIanaId": "468", "registrarAbuseEmail": "trustandsafety@support.aws.com", "createdAt": "2009-06-02T17:14:10.000Z", "updatedAt": "2026-05-16T16:53:04.000Z", "expiresAt": "2035-06-02T17:14:10.000Z", "daysUntilExpiry": 3154, "domainAgeDays": 6341, "status": ["client transfer prohibited"], "nameservers": ["ns-1225.awsdns-25.org", "ns-1928.awsdns-49.co.uk", "ns-449.awsdns-56.com", "ns-839.awsdns-40.net"], "dnssec": true, "rdapUrl": "https://rdap.verisign.com/com/v1/domain/apify.com", "dnsResponseCode": "NOERROR", "dns": { "A": ["3.170.42.100", "3.170.42.109", "3.170.42.68", "3.170.42.76"], "AAAA": ["2600:9000:2870:2000:9:a03e:6540:93a1"], "MX": ["1 aspmx.l.google.com", "5 alt1.aspmx.l.google.com"], "NS": ["ns-1225.awsdns-25.org", "ns-1928.awsdns-49.co.uk", "ns-449.awsdns-56.com", "ns-839.awsdns-40.net"], "TXT": ["google-site-verification=R_4agUZyHorQrO5QGFa6ZB_o-uDxq82NY-EteDUpPvo"] }, "dnsResolver": "google", "error": null, "errorCode": null, "checkedAt": "2026-10-13T11:24:11.691Z", "source": "RDAP (domain registry) + DNS-over-HTTPS" } ``` ## Use it from code Actor ID: `cliqtomedia/domain-whois-dns-lookup` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/domain-whois-dns-lookup").call(run_input={ "domains": [ "apify.com", "example.org", "this-domain-should-not-exist-7f3k9q.com", "repubblica.it" ], "includeRdap": True }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~domain-whois-dns-lookup/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"domains": ["apify.com", "example.org", "this-domain-should-not-exist-7f3k9q.com", "repubblica.it"], "includeRdap": true}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/domain-whois-dns-lookup") result = tool.invoke({"run_input": {"domains": ["apify.com", "example.org", "this-domain-should-not-exist-7f3k9q.com", "repubblica.it"], "includeRdap": True}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Lead lists from public data](https://cliqtomedia.com/actors/use-cases/lead-generation/): Build lists of companies and contacts from public sites. Check emails and phones before you send. ## Similar tools - [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/) - [Bulk Email Verifier: MX, Disposable, Role & Typo Check](https://cliqtomedia.com/actors/email-verifier/) - [EU VAT Number Validator (VIES) - Bulk Check, No Login](https://cliqtomedia.com/actors/vat-number-validator/) - [Europages Scraper: B2B Suppliers & Certificates (No Login)](https://cliqtomedia.com/actors/europages-companies-scraper/) - [France Company & SIRET Search](https://cliqtomedia.com/actors/france-sirene-company-search/) - [Norway Company Register (Brreg) & Updates](https://cliqtomedia.com/actors/norway-brreg-company-register/) --- # DuckDuckGo and Bing Search Results Scraper > DuckDuckGo search scraper with Bing too: get position, title, real URL and snippet for your keywords. Compare both engines in one run. No API key. URL: https://cliqtomedia.com/actors/duckduckgo-bing-search/ Category: Search, SEO & ads · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Add keywords and get DuckDuckGo and Bing results as rows. Each row has the position, title, real URL and snippet. You can compare both engines in one run. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `apify` in Search queries. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Add search queries, pick DuckDuckGo, Bing or both, and get the public search results as one row per result: position, title, real website URL, snippet and domain. - position in the engine's result list (continues across pages); - title, snippet (`description`) and the real website URL (Bing's and DuckDuckGo's redirect links are decoded); - displayed URL and domain; - the engine, query, region and page it came from. ### Good for - Check where a site appears on DuckDuckGo and Bing for a keyword list. - Collect the top 10–100 URLs for a topic for SEO, content or lead research. - Give an AI agent a cheap web search with clean rows. - Compare DuckDuckGo and Bing results for the same queries. ### Not a good fit - Only organic web results. Ads, news, images, videos, maps, "People also ask" and AI answers are not returned. - Results are not personalised and not tied to a city. - Bing with the `site:` operator returns only its first page (about 10 results). - The engines sometimes block automated traffic. The Actor changes IP addresses and retries, but it never solves CAPTCHAs (see Troubleshooting). ## Price Prices will be shown after release. ## Questions ### Do I get ads or news results? No. You get organic web results only. Ads, news, images, maps and AI answers are not included. ### Why are the links real website URLs? Both engines use redirect links. The tool decodes them, so you get the page address itself. ### How many results can I get per keyword? Up to 100 results per query and engine. A run can have up to 500 queries. ### Do I pay for blocked pages? No. Error rows and blocked or retried pages are free. ### Do I need a DuckDuckGo or Bing account or API key? No. The Actor reads public results pages without login or cookies of any account. ### Is the order the same as on duckduckgo.com or bing.com? `position` follows the order on the results pages for the chosen region. DuckDuckGo uses its simple "lite" page, which can differ a little from the full page. ### How do I search only one site? Add the operator to the query, for example `site:apify.com scraper`. On Bing you get the first page only. ## Data fields - `status` (string): complete = search result; not_found = the engine returned no results for this query (one charged page); error = the search failed after retries (free). - `engine` (string): Search engine of this row: duckduckgo or bing. - `query` (string): Your search query. - `position` (integer): Place in the engine's results for this query, from 1, continuing across pages; null on not_found/error rows. - `title` (string): Result title. - `url` (string): Real website URL (decoded from the engine's redirect link). - `displayedUrl` (string): Address as the engine shows it under the title. - `domain` (string): Host of the URL without www. - `description` (string): Snippet text. - `page` (integer): Engine result page the row came from (1 = first page). - `region` (string): Region code of the search, e.g. us-en. - `searchUrl` (string): Search page address. For DuckDuckGo pages after the first (loaded by form submit) this is the first page address. - `errorCode` (string): Machine-readable reason on error rows, e.g. SOURCE_BLOCKED or UNRELATED_RESULTS (only unrelated results; not charged); null otherwise. - `statusReason` (string): Plain-language explanation on not_found and error rows. - `fetchedAt` (string): When the page was loaded (ISO 8601, UTC). ## Input settings - `queries` (array, required): What to search, one query per line, e.g. "best running shoes". Operators such as site:example.com or "exact phrase" are passed as typed. Up to 500 queries, each up to 256 characters; duplicates are removed. - `engine` (string): DuckDuckGo, Bing, or both (every query is searched on each engine; rows carry the engine name). Default: DuckDuckGo. - `region` (string): Country and language of the results. Bing outside the United States is searched through an Apify residential IP in that country (slower). "No region" is DuckDuckGo-only; Bing then searches as United States. - `maxResults` (integer): Maximum results per query and engine (1–100). The Actor opens further result pages until it has this many or the engine has no more. You pay per loaded results page that gave rows (usually about 10 results); a search with no results is one charged page. - `safeSearch` (string): Safe search level of the engine. Default: moderate. - `timeRange` (string): Only pages the engine dates within this period. Default: any time. - `proxyConfiguration` (object): Leave empty: the Actor connects directly and switches to Apify residential proxy in the chosen country by itself when an engine blocks it. Set your own proxy group or URLs to turn this off and use only yours. The Actor never solves CAPTCHAs. ## Step by step on Apify 1. Open the Input tab. 2. In Search queries (`queries`), keep the prefilled `apify` or add your own queries, one per line. 3. Keep Search engine `DuckDuckGo` (default), or choose `Bing` or `Both`. 4. Keep Region `United States (English)` or choose another one. 5. Keep Results per query (`maxResults`) at `10` (prefill), or set up to `100`. 6. Click Start. 7. Open the Output tab and check `engine`, `position`, `title` and `url`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Rank check on two engines | `queries`, `engine: both`, `region` | result row | `engine`, `query`, `position`, `domain` | Schedule + Google Sheets or API | | Topic research | `queries`, `maxResults: 50` | result row | `title`, `url`, `description` | Export CSV / JSON | | Web search for AI agents | `queries`, `maxResults: 5` | result row | `title`, `url`, `description` | MCP or API | | Fresh pages only | `queries`, `timeRange: week` | result row | `url`, `description` | Webhook or Slack | ## Tips - Pick a region to get results for one country. - Use the time range filter to find fresh pages only. - Split very long keyword lists into several runs. ## Limits - A search with no results costs one page: the engine was asked and answered. - `error` rows and retried or blocked pages are free. This includes queries answered only with results unrelated to the query (`UNRELATED_RESULTS`). - If an engine answers nothing usable for 90 seconds (timeouts, errors or blocks), the Actor stops that engine, so a broken engine never makes a run expensive. - If you set a maximum charge for the run, the Actor stops before it, keeps the rows and ends with status `CAPPED`. - Up to 500 queries and 100 results per query and engine in one run. - 40 queries × 100 results on both engines (8,000 rows) took about 23 minutes in tests. After 3,600 seconds the run stops with status `CAPPED` and keeps all rows; split bigger lists across runs. - The engine decides how many results a query has; some queries end before `maxResults`. - Bing outside the United States is slower, because it goes through a residential IP in that country. ## Sample result ```json { "status": "complete", "engine": "duckduckgo", "query": "apify", "position": 1, "title": "Apify: Marketplace of ready-to-run tools for AI", "url": "https://apify.com/", "displayedUrl": "apify.com", "domain": "apify.com", "description": "Apify is a marketplace of ready-to-run tools for AI. Get real-time web data, track competitors, generate leads, monitor social media, and integrate your apps and agents.", "page": 1, "region": "us-en", "searchUrl": "https://lite.duckduckgo.com/lite/?q=apify&kl=us-en", "errorCode": null, "statusReason": null, "fetchedAt": "2026-10-15T05:44:38.881Z" } ``` ## Use cases with this tool - [SEO data without a big suite](https://cliqtomedia.com/actors/use-cases/seo-research/): Collect keyword ideas and check your pages and your rivals' pages. Search results and trends coming soon. ## Similar tools - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) - [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/) - [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/) - [Website Screenshot & PDF Generator: Full Page & Mobile](https://cliqtomedia.com/actors/website-screenshot-pdf/) - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) - [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/) --- # eBay Active Listings Search > eBay search scraper for active listings on 16 eBay sites: price, condition, seller, shipping and bids. Official Browse API with your free eBay key. URL: https://cliqtomedia.com/actors/ebay-browse-search/ Category: E-commerce & prices · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Search live eBay listings by keyword or category. Get one row per listing with price, condition, seller, shipping and bids. It uses the official eBay Browse API with your own free key. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `iphone 13` in Search keywords. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Search **active eBay listings** by keyword or category on 16 eBay sites and get price, condition, seller feedback, shipping, bids and links as clean rows. The Actor calls the **official eBay Browse API with your own free eBay developer keyset**: no eBay account login, no browser, no proxies, no blocked pages. - price and currency, with the current bid and bid count for auctions; - condition, seller username, seller feedback percent and score; - buying options (Buy It Now, auction, best offer), shipping cost, delivery window; - item location, category, listing start and end time, product ID (ePID); - clean listing URL and a large image URL. ### Good for - You want today's asking prices for a product, not what it sold for. - You want eBay data from the official API instead of a page scraper that breaks when eBay changes its pages. - You can create a free eBay developer account (5 minutes). ### Not a good fit - Sold or completed listings. The Browse API only returns active listings. For sold prices, see Related Actors. - Full item descriptions, all item specifics or seller contact details. - Running without an eBay keyset. ### How it works - The Actor gets an application token for your keyset (OAuth client credentials). - It reads how many Browse API calls your keyset has left today. If none are left, it stops before searching. - It runs each search page by page (up to 200 listings per call), drops listings already saved by an earlier search in the same run and writes rows to the Dataset. - It writes a `RUN_SUMMARY` record with counts, quota used, warnings and the stop reason. ## Price Prices will be shown after release. ## Questions ### Do I need an eBay key? Yes. You make a free eBay developer account and paste your Client ID and Client Secret. Takes about 5 minutes. ### Can I get sold prices? No. The Browse API returns active listings only. ### Is there a daily limit? Yes. eBay gives each keyset 5,000 Browse API calls a day. One call returns up to 200 listings. ### Does it need my eBay login? No. It uses your API keys, not your account password. ### Do I need an eBay account or a paid plan? You need a free eBay developer account to create the keyset. You do not log in to eBay in the Actor, and eBay does not charge for Browse API calls. ### Is my key safe? The key fields are secret inputs: Apify stores them encrypted, and the Actor sends them only to eBay's token endpoint. They are not written to the log, the Dataset or the run summary. ### Why is `seller` sometimes null? Since September 2025 eBay hides US seller usernames from some API developers. The field is then `null`; feedback percent and score are still filled when eBay gives them. ### Why did a search return fewer rows than `maxItems`? eBay has fewer active listings for those filters, or the search hit eBay's 10,000-result cap. The run summary shows eBay's total and a `moreAvailable` flag for each search. ## Data fields - `status` (string): ok = an active listing (paid result); no_results = this search found no active listings (small empty-result fee); api_key_required = free notice when the Client ID or Client Secret is missing. - `itemId` (string): eBay item number, as in ebay.com/itm/. - `browseItemId` (string): Browse API item id (v1||), for eBay getItem calls. - `title` (string): Listing title. - `price` (number): Buy It Now price, or the current bid of an auction that has no Buy It Now price (see priceType). - `currency` (string): Currency of price, e.g. USD, GBP or EUR. - `priceType` (string): fixed = Buy It Now price; current_bid = highest bid so far. - `currentBid` (number): Auctions only: current highest bid. - `bidCount` (integer): Auctions only: number of bids. - `originalPrice` (number): Price before the seller's markdown, when eBay shows a discount. - `discountPercent` (number): Seller's markdown in percent, when eBay shows a discount. - `condition` (string): Condition as eBay shows it on that site, e.g. New, Used, Good - Refurbished, Gebraucht. - `conditionId` (string): eBay condition id: 1000 New, 1500 Open box, 2010–2030 Refurbished, 3000 Used, 7000 For parts. - `seller` (string): Seller username. - `sellerFeedbackPercent` (number): Seller positive feedback, 0–100. - `sellerFeedbackScore` (integer): Seller feedback score. - `buyingOptions` (array): FIXED_PRICE (Buy It Now), AUCTION, BEST_OFFER, CLASSIFIED_AD. - `shippingCost` (number): Cheapest shipping cost eBay quotes for the delivery place; 0 = free shipping; null when eBay gives no amount (calculated at checkout or pickup only). - `shippingCostType` (string): FIXED or CALCULATED. - `deliveryFrom` (string): Earliest estimated delivery date (UTC, ISO 8601). - `deliveryTo` (string): Latest estimated delivery date (UTC, ISO 8601). - `location` (string): Item location as eBay shows it in search: masked postal code and country, e.g. 922**, US. - `locationCountry` (string): Two-letter country code of the item location. - `categoryId` (string): eBay leaf category id of the listing. - `categoryName` (string): Category name, e.g. Cell Phones & Smartphones. - `listedAt` (string): When the listing was created (UTC, ISO 8601). - `endsAt` (string): When the auction or timed listing ends (UTC, ISO 8601); null for Good 'Til Cancelled listings. - `topRatedBuyingExperience` (boolean): eBay Top Rated Plus listing. - `priorityListing` (boolean): Promoted (sponsored) listing. - `epid` (string): eBay catalogue product id, when the listing is matched to a product. - `itemGroupType` (string): SELLER_DEFINED_VARIATIONS when the listing has variations such as sizes or colours. - `url` (string): Listing page on eBay, without search tracking parameters. - `image` (string): Main listing picture (large size). - `marketplace` (string): eBay site searched, e.g. EBAY_US or EBAY_DE. - `query` (string): Search keywords that found this row. - `categoryFilter` (string): Category id the search was limited to, from categoryIds. - `position` (integer): 1-based position in this search's results (in the sort order you chose). - `source` (string): Always ebay-browse-api: the official eBay Browse API. - `fetchedAt` (string): When this row was fetched (UTC, ISO 8601). - `message` (string): Why a row is no_results or a key notice; null for listings. ## Input settings - `clientId` (string): App ID (Client ID) of your Production keyset from developer.ebay.com/my/keys. Stored encrypted; never written to the dataset, logs or run summary. - `clientSecret` (string): Cert ID (Client Secret) of the same Production keyset. Stored encrypted; never written to the dataset, logs or run summary. - `queries` (array): One search per line, as you would type it on eBay, up to 50. Each search returns up to Max listings per search. Leave empty to list a whole category from Category IDs. - `categoryIds` (array): Optional numeric eBay category IDs, up to 10, e.g. 9355 for Cell Phones & Smartphones on eBay.com. With keywords, every keyword is searched in every category (up to 100 searches). The number is in the category page URL on eBay, e.g. ebay.com/b/…/9355/bn_…. - `marketplace` (string): Which eBay site to search. Prices, the price filter and shipping use that site's currency. - `maxItems` (integer): Stop each search after this many listings (eBay serves up to 10,000 per search). Each saved listing is one paid result; every 200 listings use one of your 5,000 daily API calls. - `sort` (string): Order of results, as eBay sorts them. Price sorting uses the item price plus the cheapest shipping cost. - `titleMustMatch` (boolean): Keep only listings whose title contains every word of the keyword. eBay's API also matches words in item specifics, so price-sorted searches can start with loosely related items. Dropped listings are not saved or charged; each search then reads full pages of 200 and scans at most 5 times the pages maxItems needs and never more than 1,600 listings per search. - `priceMin` (integer): Only listings at or above this price, in the eBay site's currency (whole units). - `priceMax` (integer): Only listings at or below this price, in the eBay site's currency (whole units). - `condition` (string): Item condition. - `buyingFormat` (string): Listing format. - `itemLocationCountry` (string): Optional two-letter country code: only items located there, e.g. US, GB, DE, CN. - `deliveryCountry` (string): Optional two-letter country code: only items that ship there, with shipping cost and delivery dates for that country. - `deliveryPostalCode` (string): Optional postal code with Ship to country, for more exact shipping costs, e.g. 10001. ## Step by step on Apify 1. Paste your Client ID and Client Secret. 2. Keep the prefilled search (`iphone 13`, 10 listings) or type your own keywords. 3. Click Start. Rows appear in the Output tab in a few seconds. ## Use cases - Competitor prices. Search your product with `condition: "new"` and `sort: "priceLowToHigh"` to see the cheapest live offers with shipping. - Deal finding. Use `priceMax` and `buyingFormat: "auction"` with `sort: "endingSoonest"` to see auctions that end soon. - Category feed. Pass only `categoryIds` to list items in an eBay category without a keyword. - Cross-site comparison. Run the same keywords on `EBAY_US`, `EBAY_GB` and `EBAY_DE` and compare `price` and `currency`. - Repricing input. Schedule a daily run and send `itemId`, `price` and `shippingCost` to your sheet or database. ## Tips - Sort by price low to high to see the cheapest live offers. - Turn on the title filter so rows must contain your keywords. - Run the same keywords on more than one eBay site to compare prices. ## Limits - 10,000 listings per search. eBay's Browse API serves only the first 10,000 results of one search (and a few listings repeat on neighbouring pages, so expect about 9,500 unique). For more, split the search by category, price range or more specific keywords. - Up to 100 searches per run (50 keywords × 10 categories at most). - Daily quota of your keyset: 5,000 calls; each call is up to 200 listings. eBay can raise it through its Application Growth Check. - Speed: calls are sequential to save your quota. About 3–4 seconds per 200 listings: 1,000 listings in about 15 seconds, 5 searches × 10,000 in about 13 minutes (measured). The default run timeout is 30 minutes; the Actor stops 15 seconds before it, keeps saved rows and ends Succeeded with `PARTIAL` / `TIME_LIMIT`. If the timeout is so short that nothing was saved yet, the run fails with the same reason. - Active listings only. No sold listings, no full descriptions, no seller contacts. - eBay's terms forbid using this data for average selling prices or aggregated seller data; the Actor does not compute them. ## Sample result ```json { "status": "ok", "itemId": "237128712651", "title": "VINTAGE WATCHES SPARES AND REPAIRS ONLY (LOT 59) 12 IN TOTAL, MANY MORE TO LIST", "price": 25, "currency": "GBP", "priceType": "current_bid", "currentBid": 25, "bidCount": 6, "condition": "Pre-owned - Fair", "seller": "example_seller", "sellerFeedbackPercent": 100, "sellerFeedbackScore": 3326, "buyingOptions": ["AUCTION"], "shippingCost": 6.2, "shippingCostType": "FIXED", "location": "NN16***, GB", "categoryId": "31387", "categoryName": "Wristwatches", "listedAt": "2026-10-17T10:47:23.000Z", "endsAt": "2026-10-22T10:47:23.000Z", "url": "https://www.ebay.co.uk/itm/237128712651", "image": "https://i.ebayimg.com/images/g/9MAAAeSwojpq00~m/s-l1200.jpg", "marketplace": "EBAY_GB", "query": "vintage watch", "position": 2, "fetchedAt": "2026-10-22T10:46:39.419Z" } ``` ## Similar tools - [eBay Sold Listings Scraper - Sold Prices & Dates](https://cliqtomedia.com/actors/ebay-sold-listings/) - [AliExpress Scraper: Products, Prices & Reviews, No Login](https://cliqtomedia.com/actors/aliexpress-scraper/) - [Coles, Woolworths & Aldi Price Scraper - No Login](https://cliqtomedia.com/actors/au-supermarket-prices/) - [Idealo Price Scraper: All Shop Offers, 6 Countries, No Login](https://cliqtomedia.com/actors/idealo-price-scraper/) - [Naver Shopping Scraper: Korea Products & Prices](https://cliqtomedia.com/actors/naver-shopping-scraper/) - [Trendyol Scraper: Products, Prices & Reviews (No login)](https://cliqtomedia.com/actors/trendyol-scraper/) --- # eBay Sold Listings Scraper: Real Sold Prices and Dates > eBay sold listings scraper: real sold price, sale date, shipping, condition and bids by keyword on 8 eBay sites. Uses your eBay session or API key. URL: https://cliqtomedia.com/actors/ebay-sold-listings/ Category: E-commerce & prices · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/ebay-sold-listings?fpr=cliqto Search eBay sold and completed listings by keyword. You see what items really sold for, and when. eBay shows this only to signed-in users. So you use your own session or API key. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `iphone 13` in Search queries. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Get **eBay sold and completed listings** by keyword: the real sold price, sale date, shipping, condition, bids, listing type, photo and item link, from 8 eBay sites. eBay shows sold results only to signed-in users, so you choose the access: **your own eBay session** (cookies from your browser) or **your own key from a sold-data API**. ### Good for - Resellers and flippers: check what an item really sold for before you buy or list it. - Price research and appraisal: collect recent sold prices for a model, with condition and date. - Market analysts: compare auction and Buy It Now prices, or watch how prices change week by week with a schedule. ### Not a good fit - Only sold and completed listings. For active listings use eBay search or another Actor. - eBay shows mostly the last 90 days of sales; a few older sales can appear. You cannot ask for older periods. - With your eBay session, the seller name is not shown on eBay's sold result cards, so `seller` is `null`. Paid shipping is often not shown either; then `shipping` is `null` (it is `0` for free shipping). Some API sources return them. - We tested your eBay session live on ebay.com, and API keys live on ebay.com, ebay.co.uk and ebay.de. The other sites use the same page format but were not tested live with a session. - For an accepted best offer, eBay hides the real amount. The row shows the listed price and `priceType` = `best_offer_listed`. - The field names are this Actor's own. They are not the same as other eBay sold Actors, so check your integration after you switch. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.005 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Sold listing saved | $0.0036 (from $0.00225 on paid Apify plans) | One sold eBay listing saved to the dataset. | | eBay results page read | $0.02 | One page of eBay sold search results (up to 240 listings) read with your eBay session, even when your filters keep none of them. Blocked or failed requests are not charged. | | API results page read | $0.005 | One page of sold results read from the API service of your own key, even when your filters keep none of them. Failed requests are not charged. | - One sold listing: about $0.0086. - 1,000 sold listings: about $3.60. - Every day 100 sold listings, for 30 days: about $10.95 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/ebay-sold-listings?fpr=cliqto ## Questions ### Do I need an eBay account? Yes, or a key from a sold-data API. eBay shows sold results only to signed-in users. ### How far back does the data go? Mostly the last 90 days. You cannot ask for older periods. ### Why is seller or shipping empty? eBay hides them on sold cards. Some API sources return them. ### What about accepted best offers? eBay hides the real amount. The row shows the listed price and marks it. ### How fresh and complete is the data? Rows come live from eBay (or the API) at run time, mostly newest sales first (eBay's own sort). eBay keeps mostly 90 days of sales and shows at most about 2000 results per search; use narrower words or filters for more. ### Why do I see other models (for example iPhone 12) for "iphone 13"? eBay's own search also returns related items. Turn on `strictTitleMatch` to keep only titles with every word. ## Data fields - `itemId` (string): eBay item number (the digits in the /itm/ link). - `title` (string): Listing title. - `url` (string): Item page on the chosen eBay site. - `soldPrice` (number): Sale price in `currency`, without shipping. For a variation listing it is the lowest price of the range; for an accepted best offer it is the listed price (eBay hides the accepted amount). - `soldPriceMax` (number): Highest price when eBay shows a price range for a multi-variation listing; otherwise null. - `priceType` (string): sold = the price paid; range = variation listing (soldPrice..soldPriceMax); best_offer_listed = a best offer was accepted below this listed price. - `currency` (string): ISO currency code, e.g. USD, GBP, EUR. - `shipping` (number): Shipping cost shown with the sale; 0 for free shipping; null when not shown. - `totalPrice` (number): soldPrice + shipping when both are known. - `soldAt` (string): Sale (end) date, YYYY-MM-DD. eBay shows the date, not the time. - `condition` (string): Condition label as on eBay, e.g. Pre-Owned, Brand New. - `bids` (integer): Number of bids for auctions; null when not an auction or unknown. - `listingType` (string): auction, buy_it_now or best_offer. - `bestOfferAccepted` (boolean): True when eBay marks the sale "Best offer accepted". - `seller` (string): Seller username when the data source returns it. - `sellerFeedbackScore` (integer): Seller feedback count when the data source returns it. - `sellerPositivePercent` (number): Seller positive feedback percent when the data source returns it. - `location` (string): Item location as shown, e.g. "United States". - `image` (string): Main photo URL. - `epid` (string): eBay catalog product id when the listing is linked to one. - `site` (string): eBay site searched, e.g. com, co.uk, de. - `query` (string): Search query that found the listing. - `source` (string): Data source used: ebayCookies, soldcomps, compsniper, esl, trawl or openwebninja. - `fetchedAt` (string): When the Actor saved the row (ISO 8601). ## Input settings - `queries` (array, required): Keywords as you would type them on eBay. One search per line, up to 20. - `site` (string): Which eBay marketplace to search. trawl covers only ebay.com and ebay.co.uk. - `maxItems` (integer): Stop each query after this many saved listings. Each saved listing is one paid result. - `soldWithinDays` (integer): Keep only sales from the last N days (eBay shows about 90 days of sales). Empty = everything eBay shows. - `condition` (string): Filter by item condition. - `minPrice` (number): Lowest sale price, in the site currency. - `maxPrice` (number): Highest sale price, in the site currency. - `buyingFormat` (string): Only auctions or only fixed-price sales. - `strictTitleMatch` (boolean): eBay also returns loosely related items (e.g. cases for an iPhone search). Turn on to keep only titles that contain every word of the query. - `dataSource` (string): Where the sold data comes from. - `ebayCookies` (string): For "My eBay session": export cookies with the Cookie-Editor extension while signed in to the chosen eBay site (Export → JSON) and paste them here. Stored encrypted; the Actor deletes its copy of the input at start and never logs them. - `userAgent` (string): For "My eBay session": the User-Agent of the same browser. In Chrome open chrome://version and copy the "User agent" line. - `apiKey` (string): For an API data source: your own key from that service. You pay the service directly; the Actor checks the remaining quota first and never asks for more than is left. ## Step by step on Apify 1. Open the Input tab. The search `iphone 13`, the site `ebay.com (US)` and Max sold listings per query = 20 are already filled in. 2. Keep Data source = My eBay session. Paste your eBay cookies and your browser User-Agent (see the guide). Or pick an API service and paste your API key. 3. Click Start. 4. Open the Output tab. You see the Sold listings table with title, sold price, date, condition and type. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Price check before buying or listing | `queries`: one model, `maxItems`: 50 | sold listings | `soldPrice`, `condition`, `soldAt` | median price in a spreadsheet | | Auction vs fixed price | `buyingFormat`: `auction` or `buy_it_now` | sold listings | `listingType`, `bids`, `soldPrice` | compare two runs | | Weekly price tracking | `soldWithinDays`: 7, a schedule | sold listings of the last week | `soldAt`, `soldPrice`, `itemId` | Google Sheets or a webhook | | Clean list for one exact model | `strictTitleMatch`: true, `minPrice` | only matching titles | `title`, `soldPrice`, `epid` | your pricing tool via API | ## Tips - Use exact model words. eBay can mix in similar models. - Look at the median price, not one sale. It is a better guide. - Set a maximum cost per run. The tool stops and keeps what it saved. ## Limits - Max cost per run: set it in the run options. The Actor stops before a page or row it cannot pay for, keeps what it saved and ends Succeeded with status `PARTIAL`. - Failed run: you pay only the start and the pages that were really read before the stop. - Limits we tested: up to 4000 rows in one run (about 7 minutes) and 20 searches in one run. eBay usually gives about 2000 sold rows per search (9 pages). A run stops reading at 30 minutes and saves a summary. - Speed: about 240 rows in 5 seconds; 1000 rows in about 30 seconds (1 GB memory). Each new search waits 6–12 seconds. ## Sample result ```json { "itemId": "920040007475", "title": "Apple iPhone 13 - 128 GB - Blue (Unlocked)", "url": "https://www.ebay.com/itm/920040007475", "soldPrice": 230, "soldPriceMax": null, "priceType": "sold", "currency": "USD", "shipping": 0, "totalPrice": 230, "soldAt": "2026-10-14", "condition": "Pre-Owned", "bids": null, "listingType": "buy_it_now", "bestOfferAccepted": false, "seller": null, "sellerFeedbackScore": null, "sellerPositivePercent": null, "location": "United States", "image": "https://i.ebayimg.com/images/g/cokAAeSwholqz9qG/s-l1600.webp", "epid": "22049282568", "site": "com", "query": "iphone 13", "source": "ebayCookies", "fetchedAt": "2026-10-15T01:11:41.395Z" } ``` ## Use it from code Actor ID: `cliqtomedia/ebay-sold-listings` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/ebay-sold-listings").call(run_input={ "queries": [ "iphone 13" ], "site": "com" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~ebay-sold-listings/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"queries": ["iphone 13"], "site": "com"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/ebay-sold-listings") result = tool.invoke({"run_input": {"queries": ["iphone 13"], "site": "com"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/): Track prices and offers in shops and marketplaces. See changes before your customers do. ## Similar tools - [Historical Exchange Rates & Currency Converter](https://cliqtomedia.com/actors/historical-fx-rates-converter/) - [AliExpress Scraper: Products, Prices & Reviews, No Login](https://cliqtomedia.com/actors/aliexpress-scraper/) - [Coles, Woolworths & Aldi Price Scraper - No Login](https://cliqtomedia.com/actors/au-supermarket-prices/) - [Idealo Price Scraper: All Shop Offers, 6 Countries, No Login](https://cliqtomedia.com/actors/idealo-price-scraper/) - [Naver Shopping Scraper: Korea Products & Prices](https://cliqtomedia.com/actors/naver-shopping-scraper/) - [Trendyol Scraper: Products, Prices & Reviews (No login)](https://cliqtomedia.com/actors/trendyol-scraper/) --- # Bulk email verifier for lead lists and sign-ups > Bulk email verifier that checks syntax, MX records, disposable and role addresses and typos. Get a status and reasons for each email. No API key. URL: https://cliqtomedia.com/actors/email-verifier/ Category: Leads, companies & validation · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/email-verifier?fpr=cliqto Paste email addresses. Each one gets one of 4 statuses: deliverable, risky, undeliverable or unknown, with the reasons. No emails are sent. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `support@apify.com` in Email addresses. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Bulk Email Verifier checks a list of email addresses and gives every address a status: **deliverable**, **risky**, **undeliverable** or **unknown**, with the reasons. It checks syntax, DNS MX records, disposable and role addresses, free providers and domain typos. It does not open an SMTP connection, so it cannot confirm that a mailbox exists. No API key from an email provider. Your list is not sent to any third-party verification service. - Checks the syntax by the email standards (RFC 5321 / 5322). For example, `john..doe@example.com` is invalid because of the two dots. - Looks up the domain in DNS: MX records, a "null MX" record (RFC 7505) that says "this domain takes no mail", and the A/AAAA fallback when there is no MX. - Flags disposable domains (temporary inboxes like mailinator.com), role addresses (info@, support@, sales@…) and free providers (gmail.com, outlook.com…). - Suggests a fix for a likely typo: `name@gmial.com` → `name@gmail.com`. - Names the mail provider from the MX hosts, for example Google or Microsoft. - Gives one status and a list of reason codes. ### Good for - Remove bad and risky addresses before an email campaign, so fewer emails bounce. - Check emails found by a lead scraper before you add them to a CRM. - Find typos and disposable addresses in sign-up lists. - Check lists that you do not want to share with another verification company. ### Not a good fit - It does not connect to the mail server (SMTP). It cannot say if one mailbox exists, and it cannot detect catch-all domains. See Limitations. - It does not send emails. - It does not promise 100% accuracy. DNS and mail servers change all the time. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.005 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Email checked | $0.0004 (from $0.00034 on paid Apify plans) | One address checked with a deliverable, risky or undeliverable result. Unknown results are not charged. | - One email: about $0.0054. - 1,000 emails: about $0.41. - Every day 100 emails, for 30 days: about $1.35 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/email-verifier?fpr=cliqto ## Your data - No emails are sent. The tool checks the address format and the domain's DNS records. - Your list and the results stay in your own Apify account (the run and its dataset). Apify keeps them as its [data retention rules](https://docs.apify.com/platform/storage/usage?fpr=cliqto#data-retention) say, and you can delete them. - Only the domain names (like gmail.com) leave Apify, for public DNS lookups. - Roles under GDPR: you are the controller of your list. Apify processes it for you under its [Data Processing Addendum](https://docs.apify.com/legal/data-processing-addendum). We see anonymous usage statistics (like the number of runs), and your run data only if you turn on "Share run data with developers" in Apify. It is off by default. - Checking a list does not make it legal to email it. You need your own legal basis to send, and in many EU countries marketing emails to people need their consent first. See our [terms](/legal/terms/#your-responsibility-for-data-use) and the [Apify terms](https://docs.apify.com/legal). ## Questions ### How many emails can I check? Up to 10,000 addresses per run. Split bigger lists. ### Do I pay for unknown results? No. Unknown rows and removed duplicates are free. ### Does it show the mail provider? Yes. It names the provider from MX records, for example Google or Microsoft. ### Is my email list stored or shared? Your list goes only into your own Apify account: the input and the results are in your run and its dataset. Apify keeps them for the time its data retention rules say, and you can delete them at any time. We see your run data only if you turn on "Share run data with developers" in Apify; it is off by default. Only the domain names, like gmail.com, leave Apify, for public DNS lookups. No email is sent to anyone. ### Why is a fake gmail.com address "deliverable"? The tool does not ask the mail server if one mailbox exists. It checks the domain: gmail.com accepts mail. So the reason list shows mailbox_not_verified. Use an SMTP check after this tool if you need it. ### Do I need an account or API key from an email verification service? No. Everything runs inside the Actor. You only need an Apify account. ### Should I delete every `risky` address? Not always. Role addresses like `sales@` are often real. Disposable addresses and typos are usually worth removing or fixing. ## Data fields - `email` (string): The address as given (trimmed). - `normalized` (string): Lower-cased local part + ASCII (punycode) domain; null when the syntax is invalid. - `status` (string): deliverable: valid syntax and a working mail domain, no risk flags. risky: mail domain works but there is a risk flag (disposable, role, typo, no MX…). undeliverable: invalid syntax or the domain cannot receive mail. unknown: DNS lookup failed; not charged. The mailbox itself is never probed (see reasons: mailbox_not_verified). - `reasons` (array): Machine-readable reason codes, e.g. invalid_syntax, domain_not_found, null_mx_domain_accepts_no_mail, no_mx_a_record_fallback, disposable_domain, role_account, possible_domain_typo, mailbox_not_verified. - `syntaxValid` (boolean): RFC 5321/5322 syntax check result. - `domain` (string): Domain part in ASCII (punycode). - `hasMx` (boolean): true when the domain publishes MX records with a mail host that resolves to a public address; false for no MX, null MX or unresolvable MX hosts; null when DNS failed or syntax is invalid. - `mxRecords` (array): MX records sorted by priority: {exchange, priority}. - `mxProvider` (string): Mail provider detected from MX hosts, e.g. Google, Microsoft, Zoho, Proton; null when not recognised. - `isDisposable` (boolean): Domain is on the bundled disposable / temporary email list. - `isRoleAccount` (boolean): Local part is a role mailbox (info, support, sales…). - `isFreeProvider` (boolean): Domain is a free webmail provider (gmail.com, outlook.com…). - `isCatchAll` (null): Always null: catch-all needs an SMTP probe, which this Actor does not perform. - `smtpCode` (null): Always null: no SMTP connection is made. - `smtpChecked` (boolean): Always false: mailbox existence is not probed. - `didYouMean` (string): Suggested correction for a likely domain typo, e.g. name@gmail.com for name@gmial.com. - `checkedAt` (string): ISO timestamp of the check. ## Input settings - `emails` (array): Up to 10,000 addresses per run. One per line; a pasted line with several addresses separated by commas, semicolons or spaces is split automatically. Duplicates (case-insensitive) are checked once. - `inputDatasetId` (string): Pick an existing Apify dataset to read addresses from, e.g. the output of a lead scraper, or pass its ID in the API. Combined with the list above; 10,000 addresses at most in total. Up to 20,000 dataset items are read; use a smaller dataset if most items have no address. - `emailField` (string): Name of the field that holds the address in the input dataset. Rows without it are counted in the run summary. - `concurrency` (integer): How many addresses are checked at the same time (5–50). DNS results are shared per domain, so lists with many addresses on one domain are fast at any value. - `deduplicate` (boolean): Check each address once (case-insensitive). Turn off to keep one output row per input line. ## Step by step on Apify 1. Open the Input tab. 2. Paste your addresses into Email addresses (`emails`), one per line. The form already has 5 example addresses. 3. Keep the other settings at their defaults. 4. Click Start. 5. Open the Output tab and check the Status and Reasons columns. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Clean a list before a campaign | `emails` | One row per address | `status`, `reasons` | Keep `deliverable`, review `risky`, remove `undeliverable` | | Check scraped leads | `inputDatasetId` + `emailField` | One row per address | `status`, `isRoleAccount`, `mxProvider` | Import good rows into a CRM | | Fix sign-up typos | `emails` | One row per address | `didYouMean`, `reasons` | Ask the user to correct the address | | Block temporary inboxes | `emails` | One row per address | `isDisposable` | Reject or flag the sign-up | ## Tips - Use the input dataset option to check another Actor's output directly. - Fix typos with the suggested address, like gmial.com to gmail.com. - Set a maximum cost per run. The tool stops before it goes over. ## Limits - No SMTP check. Apify does not allow outgoing connections on port 25, so the Actor does not talk to mail servers. A wrong mailbox on a real domain (for example a made-up name at gmail.com) is shown as `deliverable` with `mailbox_not_verified`. Use this Actor as a fast, private first filter. If you need mailbox-level checks, use an SMTP verification service after it. - No catch-all detection. `isCatchAll` is always null. - Lists change. The disposable and free-provider lists come from open-source projects (disposable-email-domains, MIT; freemail, ISC). New temporary services may be missing. - DNS can fail. If DNS does not answer for a domain, the row is `unknown` and free. If DNS fails for more than half of the domains checked (after 10 domains, or after 30 seconds) or for more than half of the first 100 addresses, the run stops with an error so you do not wait for a list of dead domains. ## Sample result Here sales@stripe.com is risky because it is a role address (role_account): it goes to a team, not one person. mailbox_not_verified is on every address, because the tool never asks the mail server. ```json { "email": "sales@stripe.com", "normalized": "sales@stripe.com", "status": "risky", "reasons": ["role_account", "mailbox_not_verified"], "syntaxValid": true, "domain": "stripe.com", "hasMx": true, "mxRecords": [{ "exchange": "aspmx.l.google.com", "priority": 10 }], "mxProvider": "Google", "isDisposable": false, "isRoleAccount": true, "isFreeProvider": false, "isCatchAll": null, "smtpCode": null, "smtpChecked": false, "didYouMean": null, "checkedAt": "2026-10-13T01:57:42.504Z" } ``` ## Use it from code Actor ID: `cliqtomedia/email-verifier` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/email-verifier").call(run_input={ "emails": [ "support@apify.com", "someone@nonexistentdomain-7c1e5b42.com", "test@mailinator.com" ], "emailField": "email" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~email-verifier/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"emails": ["support@apify.com", "someone@nonexistentdomain-7c1e5b42.com", "test@mailinator.com"], "emailField": "email"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/email-verifier") result = tool.invoke({"run_input": {"emails": ["support@apify.com", "someone@nonexistentdomain-7c1e5b42.com", "test@mailinator.com"], "emailField": "email"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Lead lists from public data](https://cliqtomedia.com/actors/use-cases/lead-generation/): Build lists of companies and contacts from public sites. Check emails and phones before you send. - [Find the right creators, fast](https://cliqtomedia.com/actors/use-cases/creator-outreach/): Find podcasts, YouTube channels and newsletters in your niche, with public contact details. ## Similar tools - [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/) - [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/) - [EU VAT Number Validator (VIES) - Bulk Check, No Login](https://cliqtomedia.com/actors/vat-number-validator/) - [Europages Scraper: B2B Suppliers & Certificates (No Login)](https://cliqtomedia.com/actors/europages-companies-scraper/) - [France Company & SIRET Search](https://cliqtomedia.com/actors/france-sirene-company-search/) - [Norway Company Register (Brreg) & Updates](https://cliqtomedia.com/actors/norway-brreg-company-register/) --- # Etsy Listings & Shop Export > Export active Etsy listings by keyword or shop: price, views, favorites, tags, materials and photos. Uses Etsy Open API v3 and your approved Etsy app. URL: https://cliqtomedia.com/actors/etsy-listings-api/ Category: E-commerce & prices · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Search Etsy by keyword or export whole shops. Each row is one active listing with price, views, favorites, tags and shop data. You need your own approved Etsy app. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `handmade mug` in Keyword searches. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does **You need your own approved Etsy app.** Every user of this Actor needs their own app at [etsy.com/developers/your-apps](https://www.etsy.com/developers/your-apps). Etsy must approve it first, then you paste its keystring and shared secret into the input. Without them the Actor saves one free notice row and stops. ### Good for - Price and demand research for a product idea: compare price, views and favorites across many listings. - Shop research: export all active listings of shops you want to study. - Tag and keyword research: see which tags and materials sellers use for a search. ## Price Prices will be shown after release. ## Questions ### Do I need my own Etsy app? Yes. Create an app on Etsy and wait for approval. Then paste its keystring and shared secret. ### Does it open etsy.com pages? No. It reads the Etsy Open API. There is no browser and no proxy. ### Why do results differ from the Etsy website? The API ranks results in its own way. Prices are base prices, not sale prices. ### Is my key safe? Key fields are secret inputs. They are not saved in rows, logs or the run summary. ### How fresh is the data? Each row is read from Etsy during your run; `fetchedAt` shows when. Nothing is kept between runs. Etsy's API Terms ask you not to show listing data older than 6 hours, so run again for fresh data. ## Data fields - `status` (string): listing = an active Etsy listing; api_key_required = free notice row when the Etsy keystring or shared secret is missing. - `mode` (string): search = found by keyword search; shop = exported from a shop. - `query` (string): The keyword search or shop name this listing came from. - `rank` (integer): Position of the listing within its search or shop, in the sort order you chose (1 = first). - `listingId` (integer): Etsy listing id, as in etsy.com/listing/. - `title` (string): Listing title. - `description` (string): Full listing description written by the seller. - `price` (number): Price in the listing currency (for example 34.5); null when Etsy sent none, never a made-up 0. - `currency` (string): ISO currency code of the price, for example USD or EUR. - `quantity` (integer): Units available. - `shopId` (integer): Etsy shop id. - `shopName` (string): Shop name, as in etsy.com/shop/. - `shopUrl` (string): Link to the shop. - `shopRating` (number): Average shop review rating, 1-5. - `shopReviewCount` (integer): Number of shop reviews. - `shopSales` (integer): Total sales the shop shows publicly. - `shopCountry` (string): Shop country, ISO code. - `views` (integer): Listing views Etsy reports. - `favorites` (integer): How many buyers added the listing to favorites. - `tags` (array): Seller tags (up to 13): the search terms the seller targets. - `materials` (array): Materials the seller listed. - `taxonomyId` (integer): Etsy category (taxonomy) id. - `whoMade` (string): Who made it: i_did, someone_else or collective. - `whenMade` (string): When it was made, for example made_to_order or 2020_2025. - `isCustomizable` (boolean): The seller accepts custom requests. - `isPersonalizable` (boolean): The listing offers personalization. - `hasVariations` (boolean): The listing has variations such as size or color. - `isDigital` (boolean): Digital download. - `state` (string): Listing state; active for every exported listing. - `url` (string): Link to the listing, without tracking parameters. - `mainImageUrl` (string): First listing photo, full size. - `images` (array): All listing photo URLs, full size, in the seller order. - `createdAt` (string): When the listing was first created (UTC, ISO 8601). - `updatedAt` (string): When the listing was last changed (UTC, ISO 8601). - `source` (string): Always etsy-open-api-v3. - `fetchedAt` (string): When the Actor read the listing (UTC, ISO 8601). - `message` (string): Explanation on the api_key_required row; null on listings. ## Input settings - `apiKey` (string): Keystring of your approved Etsy app from etsy.com/developers/your-apps. You can also paste keystring:shared_secret here. Stored encrypted; never written to the dataset, logs or run summary. - `sharedSecret` (string): Shared secret of the same app (shown next to the keystring). Etsy rejects requests without it. Stored encrypted. - `mode` (string): search = active listings matching your keywords across Etsy; shop = all active listings of the shops you name. - `keywords` (array): Searches as you would type them on Etsy, one per line, up to 50. Used in mode search. - `shopNames` (array): Shop names or shop links (etsy.com/shop/), up to 200. Used in mode shop. Unknown shops are listed in the run summary. - `maxItems` (integer): Stop each search or shop after this many saved listings. Each saved listing is one paid result. - `sortBy` (string): Order of the listings. Relevance works for keyword searches; for shops it means newest first. - `minPrice` (number): Only listings priced at least this much (keyword search only). - `maxPrice` (number): Only listings priced at most this much (keyword search only). - `shopLocation` (string): Only shops in this place, for example United States or Canada (keyword search only). ## Step by step on Apify 1. Open the Input tab. 2. Paste your keystring into Etsy API keystring (`apiKey`) and your shared secret into Etsy shared secret (`sharedSecret`). 3. Keep the prefilled search `handmade mug` and Max listings per search or shop = 10. 4. Click Start. 5. Open the Output tab and check `title`, `price`, `views` and `favorites`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Price and demand research | `keywords` | Listing | `price`, `currency`, `views`, `favorites` | Sort or chart in a spreadsheet | | Shop research | `mode: shop`, `shopNames` | Listing | `title`, `price`, `quantity`, `createdAt` | Export to CSV or Excel | | Tag research | `keywords` | Listing | `tags`, `materials`, `rank` | Count tags in your own tool | | Seller comparison | `keywords` | Listing | `shopName`, `shopRating`, `shopSales` | Join with your own data by `shopId` | ## Tips - Start with a small search of 10 listings to test your keys. - Count the tags column in a spreadsheet to find common tags. - Run again for fresh data. Etsy asks you not to show data older than 6 hours. ## Limits The term 'Etsy' is a trademark of Etsy, Inc. This Application uses Etsy's API, but is not endorsed or certified by Etsy. - Your own Etsy app is required. The Actor has no shared key, no demo mode and no sample data. - Active listings only. Sold, expired, draft and private listings are not in the public API. There are no reviews, sales history, ad slots or "in carts" counts. - Price is the base listing price in the shop's currency. It is not converted to USD. The price on etsy.com can differ when a listing has variations or a sale. - Search order is the API's order. It is not the same as the order on etsy.com search pages, so the top results can differ. - Up to 10,000 listings per search or shop, 50 searches or 200 shops per run. One search of 10,000 listings took about 2 minutes in our tests; it can take longer when Etsy answers slowly, and the default run timeout is 10 minutes. For several large searches, raise the run timeout; when time runs out the run ends with `PARTIAL` and `TIME_LIMIT` and keeps the saved rows. - Etsy request limit. Every 100 listings use 2 requests of your app's daily limit (5,000 per day for a new app). When the limit runs out mid-run, the run ends with `PARTIAL` and `QUOTA_LIMIT`. - Not a drop-in replacement for Etsy scrapers that read etsy.com pages: some field names differ, and the source is the API, not the website. ## Sample result ```json { "status": "listing", "mode": "search", "query": "handmade mug", "rank": 1, "listingId": 1389148459, "title": "Vintage pottery mug, handmade mug, ceramic mug, ...", "price": 24, "currency": "USD", "quantity": 4, "shopName": "msvintagenicole", "shopRating": 4.96, "shopReviewCount": 225, "shopSales": 794, "shopCountry": "US", "views": 1670, "favorites": 65, "tags": ["vintage mugs", "handmade mugs", "pottery mug"], "materials": [], "whoMade": "someone_else", "isDigital": false, "url": "https://www.etsy.com/listing/1389148459/vintage-pottery-mug-handmade-mug-ceramic", "mainImageUrl": "https://i.etsystatic.com/7160843/r/il/ecdd09/4549836599/il_fullxfull.4549836599_8pxs.jpg", "createdAt": "2023-01-08T23:00:19.000Z", "source": "etsy-open-api-v3", "fetchedAt": "2026-10-22T11:08:41.815Z", "message": null } ``` ## Similar tools - [AliExpress Scraper: Products, Prices & Reviews, No Login](https://cliqtomedia.com/actors/aliexpress-scraper/) - [Coles, Woolworths & Aldi Price Scraper - No Login](https://cliqtomedia.com/actors/au-supermarket-prices/) - [Idealo Price Scraper: All Shop Offers, 6 Countries, No Login](https://cliqtomedia.com/actors/idealo-price-scraper/) - [Naver Shopping Scraper: Korea Products & Prices](https://cliqtomedia.com/actors/naver-shopping-scraper/) - [Trendyol Scraper: Products, Prices & Reviews (No login)](https://cliqtomedia.com/actors/trendyol-scraper/) - [eBay Sold Listings Scraper - Sold Prices & Dates](https://cliqtomedia.com/actors/ebay-sold-listings/) --- # EU TED Tenders Scraper and Monitor > TED tenders scraper for EU public procurement. Filter by CPV code, country and notice type. Get deadlines, values and links. Monitor mode for new tenders. URL: https://cliqtomedia.com/actors/eu-ted-tenders-scraper/ Category: Government & open data · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/eu-ted-tenders-scraper?fpr=cliqto Find EU public tenders on TED with your own filters. Get one row per notice with buyer, deadline and value. Run it every morning to see only new tenders. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `72000000` in CPV codes. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does EU TED Tenders Scraper & Monitor searches public tender notices on TED (Tenders Electronic Daily, the EU's official journal for public procurement) by publication date, CPV code, buyer country, notice type and keywords, and saves one clean row per notice: title, buyer, deadline with time zone, estimated value with currency, lots and direct TED links. - search — returns every matching notice in the date window, newest first, up to `maxResults`. - monitor — returns only notices that earlier runs of the same monitor did not deliver yet. Schedule it every day and you get only new tenders. ### Good for - Sales and bid teams who want new contract notices for their CPV codes and countries every morning. - Market research on who buys what in the EU: award notices with values and currencies. - Lead generation: buyer name, country, city and website for each tender. ### Not a good fit - Full tender documents. The Actor gives `procurementDocumentsUrl`, `pdfUrl` and `xmlUrl`, but does not download them. - Personal contacts. E-mail addresses and phone numbers are not in the output; e-mails inside descriptions are replaced with `[e-mail removed]`. - Very old archives in one run. One run covers at most 31 days. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.01 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Notice record | $0.0035 | One TED notice saved to the Dataset. Runs with no matches and monitor runs with no new notices save no records. | - One tender notice: about $0.01. - 1,000 tender notices: about $3.51. - Every day 100 tender notices, for 30 days: about $10.80 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/eu-ted-tenders-scraper?fpr=cliqto ## Questions ### Do I need a TED account or API key? No. The tool uses the public TED Search API without a key. ### Does it download the tender documents? No. It gives you links to the documents, PDF and XML. You open them yourself. ### Why do I see one procedure many times? A procedure can have several notices, like a correction or an award. Each notice is one row. ### When does TED publish new notices? TED publishes on working days, Monday to Friday. ### Is this an official TED product? No. This Actor is not affiliated with or endorsed by the Publications Office of the European Union. Source: TED — Tenders Electronic Daily, Publications Office of the European Union, reused under the Commission's reuse decision 2011/833/EU. Always check the official notice before you bid. Each row links to the official notice on ted.europa.eu. ### How fresh is the data? Each run reads TED live, so you get what TED shows at that moment. TED publishes new notices on working days (Monday–Friday). ### Why are there several rows with the same procedure? A procedure can have several notices: a contract notice, corrections, an award notice. Each notice is its own row; `procedureId` connects them. ### What is a CPV code? The Common Procurement Vocabulary is the EU code list for what is bought. You can search codes on SIMAP. ## Data fields - `publicationNumber` (string): TED publication number, e.g. 674231-2026. One row per published notice; a corrected or changed notice is a new row with its own number. - `noticeId` (string): eForms notice identifier (UUID). Null for legacy notices published before eForms. - `noticeVersion` (integer): eForms notice version (1, 2, …). Null for legacy notices. - `procedureId` (string): eForms procedure identifier (UUID) shared by all notices of one procedure. A procedure is not a notice: several rows can share it. - `isChangeNotice` (boolean): True when this notice changes an earlier notice (eForms change notice). - `changesNotice` (string): Which notice this one changes, as given by TED: a publication number (657981-2026) or an eForms notice id with version suffix. - `changeReasonCode` (string): TED change reason code, e.g. cor-buy (buyer correction), cor-pub, update-add. - `noticeType` (string): eForms notice type, e.g. cn-standard (contract notice), can-standard (award), pin-only (prior information), corr (legacy correction). - `noticeSubtype` (string): eForms notice subtype number (1–40, E1–E6) as published. - `formType` (string): eForms form type: planning, competition, result, dir-awa-pre, cont-modif, change, consultation. - `procedureType` (string): Procedure type code, e.g. open, restricted, neg-w-call. Null when TED gives none. - `publicationDate` (string): Publication day in the Official Journal S (YYYY-MM-DD, as published, not shifted to UTC). - `publicationDateRaw` (string): Publication date exactly as TED returns it, with its time zone offset, e.g. 2026-10-01+02:00. - `dispatchDate` (string): Day the buyer sent the notice to TED (YYYY-MM-DD). - `ojsNumber` (string): Official Journal S issue, e.g. 190/2026. - `title` (string): Notice title in the preferred language, or the fallback shown in titleLanguage. - `titleLanguage` (string): Language of title (ISO 639-2, e.g. ENG). Differs from preferredLanguage when TED had no translation. - `originalTitle` (string): Short procedure title in the buyer's original language. - `description` (string): Procedure description in the preferred language or the fallback in descriptionLanguage, cut at 4,000 characters. Usually only in the original language. - `descriptionLanguage` (string): Language of description (ISO 639-2). - `buyerName` (string): Buyer (contracting authority) name. TED publishes it only in the original language, so buyerNameLanguage often differs from preferredLanguage. - `buyerNameLanguage` (string): Language of buyerName (ISO 639-2). - `buyerNames` (array): All buyer names of a joint procurement, in the same language as buyerName. - `buyerCountry` (string): Buyer country, ISO 3166-1 alpha-3 (e.g. DEU). - `buyerCountries` (array): All buyer countries (alpha-3), for joint cross-border procurements. - `buyerCity` (string): Buyer city as published. - `buyerWebsite` (string): Buyer organisation website as published in TED; some buyers give a bare domain without https://. Not a personal contact. - `cpvCodes` (array): All CPV codes of the procedure and its lots, without duplicates (8 digits, no check digit). - `mainCpvCode` (string): Main CPV code of the procedure. - `placeOfPerformanceCountries` (array): Countries of performance (alpha-3), when published. - `tenderDeadline` (string): Earliest deadline for tenders across lots, ISO 8601 with the published offset, e.g. 2026-11-04T10:00:00+01:00. Only the date when TED gives no time (see tenderDeadlineDateOnly). Null when the notice has no tender deadline (e.g. award or prior information notices). - `tenderDeadlineDateOnly` (boolean): True when TED gave a deadline day without a time. Null when there is no deadline. - `requestDeadline` (string): Earliest deadline for requests to participate (restricted and negotiated procedures): ISO 8601 date-time with the offset published by TED, or a YYYY-MM-DD date when TED gives no time. - `estimatedValue` (number): Estimated value without VAT: the procedure estimate, or the sum of lot estimates when all lots have one in the same currency (see estimatedValueSource). Null when not published — never 0 as a placeholder. - `estimatedValueCurrency` (string): Currency of estimatedValue (ISO 4217, e.g. EUR, CZK). - `estimatedValueSource` (string): procedure = published procedure estimate; lots_sum = sum of the lot estimates. - `totalValue` (number): TED total value: for award notices the total awarded value, for other notices the total published value. Null when absent or published in several currencies. - `totalValueCurrency` (string): Currency of totalValue. - `lotsCount` (integer): Number of lots in the notice (0 for legacy notices without lot data). - `lotIds` (array): Lot identifiers, e.g. LOT-0001. A lot is part of the notice, never its own row. ## Input settings - `mode` (string): search: every matching notice in the date window. monitor: only notices that earlier runs of the same monitor (monitorStateName) have not delivered yet — schedule it daily to get new tenders only. The first monitor run returns every match. - `lastDays` (integer): Publication window when Date from is empty: the last N calendar days (UTC), including today. TED publishes on working days (Monday–Friday). 1–31, default 7, so the window always contains several working days. - `dateFrom` (string): First publication day (YYYY-MM-DD), inclusive. Overrides Last N days. The window may be at most 31 days. - `dateTo` (string): Last publication day (YYYY-MM-DD), inclusive. Default: today (or Date from, when it is in the future). - `cpvCodes` (array): Up to 50 CPV codes (8 digits; a -N check digit is ignored), e.g. 72000000 for IT services or 45000000 for construction. TED also matches every sub-code of a broader code. Empty: all CPV codes. - `buyerCountries` (array): ISO 3166-1 alpha-3 codes of the buyer country, e.g. DEU, FRA, POL (two-letter EU codes such as DE are converted). Empty: all countries. - `noticeTypes` (array): eForms notice types. Empty: all types. Most bidders want cn-standard (contract notices); market research often adds can-standard (award notices). - `keywords` (string): Optional full-text search in TED (all languages of the notice), e.g. cloud computing. Up to 200 characters; quotes, brackets and operators are removed. - `preferredLanguage` (string): Language for title, description and links. When TED has no text in it, the row falls back to English, then to the notice's original language, and says which language was used (titleLanguage, buyerNameLanguage). Buyer names are usually only in the original language. - `maxResults` (integer): Maximum notices (Dataset rows) per run, newest first. Each row is one paid notice event. 1–2500, default 100. - `monitorStateName` (string): Monitor mode only: name of the snapshot of delivered notices (a-z, 0-9, -). Use a different name for each saved search, e.g. it-services-de. Stored in your named key-value store eu-ted-tenders-monitor. ## Step by step on Apify 1. Open the Input tab. The form is already filled: CPV `72000000`, last 7 days, 20 notices. 2. Optional: add buyer countries, for example `DEU` and `FRA`, or choose a notice type such as `cn-standard`. 3. Click Start. 4. Open the Output tab and look at the Overview view: title, buyer, country, deadline, value and link. ## Use cases | Task | Input | Key fields | Next step | |---|---|---|---| | Find open tenders to bid on | `cpvCodes`, `buyerCountries`, `noticeTypes: ["cn-standard"]` | `title`, `tenderDeadline`, `estimatedValue`, `procurementDocumentsUrl` | Send to a sheet or CRM | | Daily tender alerts | `mode: "monitor"`, schedule | `monitorStatus`, `title`, `noticeUrl` | Slack or e-mail via integrations | | Market and competitor research | `noticeTypes: ["can-standard"]`, `dateFrom`/`dateTo` | `buyerName`, `totalValue`, `totalValueCurrency`, `cpvCodes` | Export to CSV or BI | | Public-sector lead lists | `buyerCountries`, `cpvCodes` | `buyerName`, `buyerCity`, `buyerWebsite` | Enrich in your CRM | ## Tips - Use monitor mode on a daily schedule. You get only notices you have not seen. - One run covers up to 31 days. Use several runs for longer periods. - Always open the official TED link and check the notice before you bid. ## Limits - Window: at most 31 days per run. For longer periods, run once per month. - Rows: at most 2,500 rows per run (`maxResults`). In our tests 2,500 rows took about 25 seconds. - TED query window: TED serves only the first 15,000 notices of one query. A monitor run with very broad filters stops there with status `PARTIAL` and a warning; narrow the filters or use `lastDays` of 1–3. - Run time: the Actor stops reading TED after about 4 minutes and keeps the rows it has (`PARTIAL`). - Values as published: deadlines keep the time zone offset that TED publishes, even if it looks unusual. An `estimatedValue` of `0` means the buyer published 0; a missing value is `null`. - Languages: buyer names and descriptions are often only in the original language. The `…Language` fields tell you which language you got. - No personal contacts: contact e-mails and phone numbers are not returned. ## Sample result ```json { "publicationNumber": "700154-2026", "procedureId": "c8e5ed0b-9c1a-4c7b-b32a-130c6ceda6a4", "noticeType": "cn-standard", "formType": "competition", "procedureType": "open", "publicationDate": "2026-10-09", "title": "Germany – IT services: consulting, software development, Internet and support – Wartungleistungen von Server- und Storagesystemen sowie Switchen", "titleLanguage": "ENG", "buyerName": "Land Hessen, vertreten durch die Hessische Zentrale für Datenverarbeitung", "buyerNameLanguage": "DEU", "buyerCountry": "DEU", "buyerCity": "Wiesbaden", "buyerWebsite": "https://vergabe.hessen.de", "mainCpvCode": "72000000", "tenderDeadline": "2026-11-09T10:00:00+01:00", "tenderDeadlineDateOnly": false, "requestDeadline": null, "estimatedValue": 345600, "estimatedValueCurrency": "EUR", "estimatedValueSource": "procedure", "lotsCount": 1, "lotIds": ["LOT-0000"], "noticeUrl": "https://ted.europa.eu/en/notice/-/detail/700154-2026", "pdfUrl": "https://ted.europa.eu/en/notice/700154-2026/pdf", "xmlUrl": "https://ted.europa.eu/en/notice/700154-2026/xml", "linkLanguage": "ENG", "dataModel": "eforms", "monitorStatus": null, "source": "TED", "fetchedAt": "2026-10-11T02:17:31.898Z" } ``` ## Use it from code Actor ID: `cliqtomedia/eu-ted-tenders-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/eu-ted-tenders-scraper").call(run_input={ "mode": "search", "lastDays": 7 }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~eu-ted-tenders-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"mode": "search", "lastDays": 7}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/eu-ted-tenders-scraper") result = tool.invoke({"run_input": {"mode": "search", "lastDays": 7}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Reach out when the company is ready](https://cliqtomedia.com/actors/use-cases/buying-signals/): Know when a company hires, raises money or wins a contract. Reach out at the right moment. ## Similar tools - [USAspending Federal Awards & Recipient Monitor](https://cliqtomedia.com/actors/usaspending-federal-awards-monitor/) - [France Company & SIRET Search](https://cliqtomedia.com/actors/france-sirene-company-search/) - [UK Bank Holidays & Business Day Calculator](https://cliqtomedia.com/actors/uk-bank-holidays-business-days/) - [UK Postcode Lookup](https://cliqtomedia.com/actors/gb-postcode-lookup/) - [VIN Decoder & Vehicle Recalls](https://cliqtomedia.com/actors/vin-decoder-vehicle-recalls/) - [FDA Recalls & Enforcement Monitor](https://cliqtomedia.com/actors/fda-recalls-enforcement-monitor/) --- # Europages scraper for B2B suppliers and manufacturers > Europages scraper for B2B suppliers, makers and wholesalers. Search by product and country. Get website, address, size, certificates and VAT ID. URL: https://cliqtomedia.com/actors/europages-companies-scraper/ Category: Leads, companies & validation · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/europages-companies-scraper?fpr=cliqto Search Europages by product and country. You get one row per supplier with website, address, size and founding year. Company profiles add certificates, VAT ID and phone. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `packaging` in Search terms. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Search Europages, the European B2B directory, by product keyword, country and company type. Get one row per supplier with website, address, employees, founding year, certificates, activities, VAT ID and company phone. ### Good for - Find manufacturers or wholesalers of a product in one or more European countries. - Build a supplier shortlist with website, size (employees) and founding year. - Check which suppliers list a certificate such as ISO 9001 or ISO 14001. - Enrich a lead list with the company VAT ID and main phone number. ### Not a good fit - No e-mail addresses and no personal contacts. The Actor returns only the company's main phone number. E-mail addresses in company descriptions are replaced with `[email removed]`. - Europages search is fuzzy. It also returns companies that only match part of a word, or a related term. Even a nonsense word can return a few companies. Check `keywords`, `activities` and `mainActivity` if you need exact matches. - Up to 1,000 companies per search (one keyword in one country) and up to 20 searches per run. - Fields depend on what each company publishes. Many companies have no certificates, VAT ID or activities. - The Actor does not promise a complete list of all companies in a country. It returns what Europages search shows. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.005 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Company | $0.0054 (from $0.0045 on paid Apify plans) | One saved Europages company row. Duplicates and rows whose profile could not be read are not charged. | - One result: about $0.01. - 1,000 results: about $5.41. - Every day 100 results, for 30 days: about $16.35 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/europages-companies-scraper?fpr=cliqto ## Questions ### Do I need a Europages account? No. The tool reads public Europages pages. ### Do I get email addresses? No. You get the company phone and website, but no emails or personal contacts. ### How many companies can I get? Up to 1,000 per search and 20 searches per run. With profiles, about 1,500 fit in one hour. ### What if nothing is found? The run ends as empty. You pay only the start fee. ### Does it return e-mail addresses? No. It returns the company's main phone number and website. It does not collect personal contacts or e-mails. ### Why does the same keyword give a slightly different list on another day? Europages changes its ranking and its company data. The Actor returns what Europages shows at run time. Use `companyId` to compare runs. ## Data fields - `companyId` (string): Europages company ID, stable across runs. - `uuid` (string): Europages company UUID. - `name` (string): Company name. - `url` (string): Company profile on www.europages.co.uk. - `website` (string): Company's own website. - `country` (string): Country of the company address, ISO 3166-1 alpha-2 (DE, FR, ...). - `city` (string): City of the company address. - `street` (string): Street address. - `zipcode` (string): Postal code. - `latitude` (number): Latitude of the company address. - `longitude` (number): Longitude of the company address. - `description` (string): Company description from Europages. E-mail addresses in the text are replaced with [email removed]. - `mainActivity` (string): Main business area from the profile, e.g. Packaging material. Null without profile details. - `activities` (array): Activities (Europages categories) from the profile, up to 15; empty without profile details. - `activitiesTotal` (integer): Total number of activities the profile lists. - `keywords` (array): Business keywords the company lists on its profile, up to 50; empty without profile details. Many companies have keywords but no activities. - `productCategories` (array): Product categories of the company catalogue on the profile. - `companyType` (array): Company types: production, customer_specific_manufacturing, distribution, wholesaler, service. - `employees` (string): Employee range, e.g. 50-99. - `foundedYear` (integer): Year the company was founded. - `certifications` (array): Certificate names from the profile, e.g. ISO 9001; null without profile details. - `certificationsCount` (integer): Number of certificates. - `vatId` (string): VAT ID when the company publishes it on Europages. - `phone` (string): Company's main phone number. Personal contacts of employees are never collected. - `distributionArea` (string): Where the company sells: national, europe or international. - `productCount` (integer): Number of products in the company catalogue. - `logoUrl` (string): Company logo image. - `query` (string): Search term that found the company. - `searchCountry` (string): Country filter of the search that found the company; null for all countries. - `searchRank` (integer): Position of the company in that search (1 = first). - `detailStatus` (string): complete = search result and profile; listing_only = profiles turned off; detail_error = profile could not be read, fields come from the search result; such a row is not charged. - `detailError` (string): Why the profile could not be read; null otherwise. - `source` (string): Always europages. - `fetchedAt` (string): When the row was collected (ISO 8601, UTC). ## Input settings - `queries` (array, required): Products or services to search for, in English, e.g. packaging, led street lighting or cnc machining. Each term is a separate Europages search. Up to 20 terms, each 2 to 100 characters. - `countries` (array): Only companies based in these countries. Each country is a separate search for every term (at most 20 term × country searches per run). Leave empty to search all countries. - `companyType` (string): Only companies of this type, filtered by Europages itself. A company can have several types. - `maxItems` (integer): Stop each search (one term in one country) after this many companies. Europages shows 30 companies per page. You pay only for companies saved. - `includeDetails` (boolean): Open each company profile for certificates, activities, product categories, main business area, VAT ID and company phone. Turn off for faster, search-result-only rows. ## Step by step on Apify 1. Open the Input tab. 2. Add a product keyword in Search terms (`queries`), for example `packaging`. 3. Choose one or more Countries (`countries`), for example `DE`. Leave it empty to search all of Europe. 4. Keep Max companies per search (`maxItems`) at the prefill `20` for a first test. 5. Click Start. 6. Open the Output tab and check the Companies view: `name`, `country`, `city`, `website`, `companyType`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Find manufacturers of a product | `queries`, `countries`, `companyType` = `production` | Company | `name`, `website`, `country`, `employees` | Export to CSV or Google Sheets | | Supplier check by certificate | `queries`, `includeDetails` = `true` | Company | `certifications`, `foundedYear`, `distributionArea` | Filter rows by `certifications` | | Lead list for B2B sales | `queries`, `countries` | Company | `website`, `phone`, `vatId`, `city` | Import to CRM via API or integration | | Quick market count | `queries`, `includeDetails` = `false` | Company (search result only) | `name`, `country`, `companyType` | Count rows per country | ## Tips - Write search terms in English, like packaging or cnc machining. - Europages search is fuzzy. Check activities to keep exact matches. - Turn off profiles for a fast first count of companies. ## Limits - Company: one event for each saved company row. The price depends on your Apify plan: - 20 searches per run, 1,000 companies per search, 20 terms per run. - One run works for at most 1 hour. With profiles this is about 1,500 companies per run, so 20 searches × 1,000 companies do not fit in one run. - 20 companies with profiles: about 20 seconds to 4 minutes. 1,000 companies with profiles: about 40 minutes. - Default memory 512 MB; default timeout 3,600 seconds. For big runs keep the timeout at 3,600 seconds or more. ## Sample result ```json { "companyId": "21241677", "name": "RHEIN-PLAST GMBH", "url": "https://www.europages.co.uk/en/company/rhein-plast-gmbh-21241677", "website": "https://www.rhein-plast.de/", "country": "DE", "city": "Bad Dürkheim", "street": "Altenbacher Strasse 24-26", "zipcode": "67098", "mainActivity": "Packaging services", "keywords": ["Anti-static film", "Bags with adhesive sealing", "Clean room packaging"], "productCategories": ["Flat Pouches", "Pharmaceutical Packaging"], "companyType": ["production"], "employees": "50-99", "foundedYear": 1959, "certifications": [], "certificationsCount": 0, "vatId": "DE149372181", "phone": "+4963227980", "distributionArea": "international", "query": "packaging", "searchCountry": "DE", "searchRank": 1, "detailStatus": "complete", "detailError": null, "source": "europages", "fetchedAt": "2026-10-15T00:13:29.645Z" } ``` ## Use it from code Actor ID: `cliqtomedia/europages-companies-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/europages-companies-scraper").call(run_input={ "queries": [ "packaging" ], "countries": [ "DE" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~europages-companies-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"queries": ["packaging"], "countries": ["DE"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/europages-companies-scraper") result = tool.invoke({"run_input": {"queries": ["packaging"], "countries": ["DE"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Lead lists from public data](https://cliqtomedia.com/actors/use-cases/lead-generation/): Build lists of companies and contacts from public sites. Check emails and phones before you send. ## Similar tools - [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/) - [Bulk Email Verifier: MX, Disposable, Role & Typo Check](https://cliqtomedia.com/actors/email-verifier/) - [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/) - [EU VAT Number Validator (VIES) - Bulk Check, No Login](https://cliqtomedia.com/actors/vat-number-validator/) - [France Company & SIRET Search](https://cliqtomedia.com/actors/france-sirene-company-search/) - [Norway Company Register (Brreg) & Updates](https://cliqtomedia.com/actors/norway-brreg-company-register/) --- # Europe PMC Literature Search and Monitor > Europe PMC API tool to search biomedical articles and preprints. Export PMID, PMCID, DOI, abstract and license. Compare snapshots for new papers. URL: https://cliqtomedia.com/actors/europe-pmc-literature-search/ Category: Science & research data · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Search Europe PMC for articles and preprints. Get IDs, abstracts, licenses and full-text links in one table. Pass your last snapshot to see new or updated papers. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `CRISPR` in Europe PMC query. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Search Europe PMC for biomedical articles and preprints and get one Dataset row per publication: identifiers (PMID, PMCID, DOI), title, authors, journal, dates, abstract, license and full-text links. Pass a previous snapshot to find new or updated records. ### Good for - Literature surveillance: new papers or preprints on a topic in the last N days. - Building a citation list or spreadsheet with DOI, PMID, PMCID, license and links. - Checking which records are open access and under which license before reuse. - Recurring monitoring of one query with a saved snapshot. ### Not a good fit - Full text download: the Actor returns full-text links but does not fetch articles. - More than 500 records per run, or a complete history of a topic. - DOI-based deduplication: the same article in MED and PMC stays as two rows. - Medical conclusions, ranking by quality or relevance scoring. ## Price Prices will be shown after release. ## Questions ### Do I need a Europe PMC key? No. It uses the public Europe PMC REST search. ### Does open access mean I can reuse the text? Not always. Check the license and the publisher terms. ### Does it download full text? No. It gives full-text links only. ### Why does one paper show twice? The same article can be in two sources. They stay as two rows. ### Why are `doi` and `abstractText` empty for some rows? The newest records are often added before the source has a DOI, PMID or abstract. The Actor keeps `null` instead of guessing. Records published some time ago more often have these fields filled. ### Can I get every article on a topic? No. One run inspects up to 500 records, newest first. Use date windows to split larger reviews. ## Data fields - `key` (string): Stable identity source:id. MED and PMC entries are distinct records. - `id` (string): Original Europe PMC ID. - `source` (string): Original literature source code, such as MED, PMC or PPR. - `title` (string): Publication title from the source. - `provider` (string): Europe PMC. - `sourceUrl` (string): Source record page. - `fetchedAt` (string): UTC time when this row was read. - `fingerprint` (string): SHA-256 of normalized content, excluding fetch time and change classification. - `pmid` (string): PubMed ID, null when absent. - `pmcid` (string): PubMed Central ID, null when absent. - `doi` (string): DOI, null when absent. - `authorString` (string): Source author display string. - `journal` (string): Journal title, null for records without one. - `pubDate` (string): First publication date reported by Europe PMC. - `firstIndexDate` (string): First Europe PMC indexing date, not a last-update date. - `abstractText` (string): Source abstract text, possibly with HTML markup. Null when absent. - `license` (string): Source article license. Null means unknown; not an abstract-specific reuse grant. - `authors` (array): Author names in source order; empty if absent. - `pubTypes` (array): Source publication type labels. - `pubYear` (integer): Reported publication year; null if absent. - `citedByCount` (integer): Citation count; zero is preserved, absent is null. - `isOpenAccess` (boolean): Source open-access flag; unknown is null. - `isPreprint` (boolean): True for PPR or publication type Preprint. No medical conclusion. - `sourceUpdatedAt` (string): Source dateOfRevision when supplied. Source revision date, not fetch/index/publication time; null when unavailable. - `changeType` (string): Compared with previousSnapshot. Without baseline all rows are new. - `fullTextUrls` (array): Source-supplied links. Access status can be open, free or subscription. Full text is not downloaded. ## Input settings - `query` (string, required): Required search text or Europe PMC syntax. Blank queries fail before source access. - `lastDays` (integer): Inclusive UTC first-publication window. Optional; do not combine with dateFrom/dateTo. Omit all date fields to search all years. - `dateFrom` (string): Optional inclusive first publication date, YYYY-MM-DD. Do not combine with lastDays. - `dateTo` (string): Optional inclusive first publication date, YYYY-MM-DD, on or after dateFrom. - `openAccessOnly` (boolean): Add OPEN_ACCESS:Y. Open access does not grant reuse rights; check license. - `source` (string): ALL searches every Europe PMC source, including sources outside these three. MED is PubMed, PMC is PubMed Central, PPR is preprints. Records remain distinct by source:id. - `maxResults` (integer): Inspect at most this many unique records, up to 500. In onlyNew mode the emitted row count can be smaller. - `previousSnapshot` (object): Optional SNAPSHOT record from a prior run with the same query and filters (up to 5,000 records). Paste the entire JSON object; a snapshot from a stopped run is also fine. Do not use Dataset rows here. - `onlyNew` (boolean): With a previousSnapshot, emit new source:id records only. Unchanged rows stay in SNAPSHOT; updated rows stay there with their old fingerprint, because they were not delivered. Without a baseline every record is new. ## Step by step on Apify 1. Open the Input tab. The form is prefilled with the CRISPR example below. 2. Click Start. 3. Open Publications in the Dataset. Check `title`, `pmcid`, `pubDate` and `license`. Full-text links (`fullTextUrls`) and the other fields are in the full JSON, CSV or Excel export. 4. Open Run summary to check counts, source matches and limits. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | New research on a topic | `query` + `lastDays` | Publication | `title`, `pubDate`, `doi`, `sourceUrl` | Export CSV or read via API | | Open-access reuse check | `query` + `openAccessOnly: true` | Publication | `isOpenAccess`, `license`, `fullTextUrls` | Check license before reuse | | Preprint tracking | `source: "PPR"` | Publication | `isPreprint`, `title`, `firstIndexDate` | Export or monitor | | Fixed review period | `dateFrom` + `dateTo` | Publication | `pmid`, `doi`, `pubTypes`, `abstractText` | Screening spreadsheet | | Repeat monitoring | `previousSnapshot` + `onlyNew` | Publication with change type | `changeType`, `fingerprint`, `citedByCount` | Save new `SNAPSHOT` | ## Tips - Use date windows to split big searches. One run checks up to 500 records. - Save the snapshot each time for repeat monitoring. - Very new records may have no DOI or abstract yet. ## Limits Europe PMC data access covers metadata, abstracts and full text under different rights. Free or open access does not mean every use is allowed: check the record license and publisher terms before reusing abstracts or following full-text links. The `license` field is the article license, not an abstract-specific legal guarantee. This Actor is independent of Europe PMC. - Maximum 500 unique inspected records per run. A 500-record run usually takes under a minute (about 10 seconds in our tests); with slow source responses it can stop as `PARTIAL` at the internal deadline. - Source requests are sequential, at least one second apart, each with a 15-second timeout. Source work has a 180-second deadline, a 25-request cap including retries, a 12 MiB limit per response and an 8 MiB total response limit. Two source timeouts stop the run. Memory is 256 MB. - The source can add or update records later, and publication date is not index date. For systematic reviews, verify your search strategy and export criteria. This Actor returns data, not medical conclusions or recommendations. ## Sample result ```json { "key": "PMC:PMC9467582", "id": "PMC9467582", "source": "PMC", "pmid": null, "pmcid": "PMC9467582", "doi": null, "title": "Prion 2022 Conference abstracts: pushing the boundaries", "authors": ["Author A"], "authorString": "Author A.", "journal": "Prion", "pubYear": null, "pubDate": "2026-10-12", "firstIndexDate": "2026-10-12", "pubTypes": ["Abstract"], "abstractText": null, "isPreprint": false, "isOpenAccess": true, "license": "cc by", "citedByCount": 0, "fullTextUrls": [ {"url": "https://europepmc.org/articles/PMC9467582", "site": "Europe_PMC", "availability": "Free", "documentStyle": "html"}, {"url": "https://europepmc.org/articles/PMC9467582?pdf=render", "site": "Europe_PMC", "availability": "Free", "documentStyle": "pdf"} ], "provider": "Europe PMC", "sourceUrl": "https://europepmc.org/article/PMC/PMC9467582", "fetchedAt": "2026-10-13T08:53:26.062Z", "sourceUpdatedAt": "2026-10-12", "changeType": "new", "fingerprint": "246e0e5a9fd93eff41e313e76282f946e67484bb15b83a8a476cd981598af7cc" } ``` ## Similar tools - [Google Patent Details Scraper](https://cliqtomedia.com/actors/google-patents-scraper/) - [DOI Metadata & Bibliography Enrichment](https://cliqtomedia.com/actors/doi-bibliography-enrichment/) - [ClinicalTrials.gov Studies Search & Monitor](https://cliqtomedia.com/actors/clinicaltrials-gov-studies-monitor/) - [DataCite Research Dataset Search](https://cliqtomedia.com/actors/datacite-dataset-search/) - [GBIF Biodiversity Occurrence Search](https://cliqtomedia.com/actors/gbif-occurrence-search/) - [Google Scholar Search Scraper - Citations & PDFs, No Login](https://cliqtomedia.com/actors/google-scholar-scraper/) --- # Events Scraper for Eventbrite, Meetup and Luma > Eventbrite scraper that also covers Meetup and Luma. Get events by city, keyword and date with venues, organizers, prices and links. No login. URL: https://cliqtomedia.com/actors/events-aggregator/ Category: Real estate, travel & cars · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/events-aggregator?fpr=cliqto Get public events from three sites in one list. Type a city or Online, add keywords and dates. Duplicates are removed for you. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `AI` in Keywords. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Get public events from **Eventbrite, Meetup and Luma** in one clean dataset. Type any city (or `Online`), add keywords and dates, and get event names, local start times, venues, organizers, prices and links. No login. A run with 20 events costs about $0.06–$0.07. - Eventbrite: any city in the world, or `Online`. Up to 25 result pages for each keyword. Prices and organizer names are added for matching events. - Meetup: any city when you give a country code. One search page for each keyword, usually 20–30 events. - Luma: about 85 large cities (for example London, New York, Berlin, Austin, São Paulo, Singapore). Other cities are skipped, not failed. ### Good for - Build a weekly list of tech, music or business events in a city. - Find events to sponsor, speak at or write about. - Collect organizer names and event links for outreach research. ### Not a good fit - It does not log in and does not collect attendee lists, guest emails or host contact details. - It is not a full archive of a city. Each site shows a limited number of search pages; results change from day to day. - Some fields are often empty on some sites (for example Meetup prices and venues, or Luma organizers). Empty means "not published", not "free". - You are responsible for using the data in line with each site's terms and the law in your country. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.006 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Event scraped | $0.0032 (from $0.00272 on paid Apify plans) | One saved public event | - One event: about $0.0092. - 1,000 events: about $3.21 (2 runs of up to 500). - Every day 100 events, for 30 days: about $9.78 a month. - 500 events once a week (4 runs a month): about $6.42 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/events-aggregator?fpr=cliqto ## Questions ### Do I need accounts on these sites? No. The tool reads public pages without login or API keys. ### Can I get attendee lists? No. It does not collect attendees, guest emails or host contacts. ### Why do I get fewer events than I asked for? The sites show a limited number of results. Your max number is a limit, not a promise. ### Can I get only online events? Yes. Use Online as the city or the online setting. ### Do I need an Eventbrite, Meetup or Luma account? No. The Actor reads public pages only. It does not need a login, cookies or an API key. ### Does it collect personal data? No attendee lists or guest emails. For Luma, personal hosts are not saved; only a group or calendar name is shown as `organizer`. ### Why are some prices empty? Meetup and Luma often do not publish prices on search pages. Empty means unknown, not free. Check `isFree` and the event page. ### How fresh are the results? Every run reads the sites live. `fetchedAt` shows when each event was read. ## Data fields - `source` (string): eventbrite, meetup or luma. - `eventId` (string): Event ID on the source site. - `title` (string): Public event title. - `url` (string): Public event URL. - `startAt` (string): Start in event local time with UTC offset, for example 2026-11-06T18:30:00+00:00. - `endAt` (string): End in event local time with UTC offset; null if the site does not show it. - `timezone` (string): IANA time zone of the event, for example Europe/London; null if unknown. - `venue` (string): Venue name; null for online events or when not shown. - `address` (string): Street address of the venue when the site shows it. - `city` (string): City of the venue; null for online events. - `country` (string): Two-letter country code of the venue; null for online events. - `online` (boolean): true for online events, false for in-person, null for hybrid or unknown. - `organizer` (string): Public organizer or group name. Private person names are never included. - `price` (number): Lowest listed ticket price in currency units. 0 can be a free or donation ticket (see isFree); null if unknown. - `currency` (string): Ticket price currency, for example GBP; null if unknown. - `isFree` (boolean): true if all tickets are free; null if unknown. - `category` (string): Category from the site (Eventbrite only). - `description` (string): Short public description as plain text (Eventbrite summary, Meetup description); null for Luma. - `sourceUrl` (string): Search page or API URL that returned this event. - `fetchedAt` (string): UTC time when the source page was read. ## Input settings - `location` (string): City name in English, for example London, Berlin, Austin or São Paulo. Type Online for online events only (Eventbrite). - `countryCode` (string): Two-letter country code, for example GB, US, DE. Needed for Meetup. It also stops Eventbrite from using a city with the same name in another country. - `stateCode` (string): Optional. For US cities only, for example TX for Austin or OR for Portland. - `keywords` (array): Up to 5 keywords. An event is kept if any keyword is a whole word in its title, description or category. Leave empty to get all events. - `sources` (array): Sites to search. Luma covers about 85 big cities. Meetup needs a country code. - `dateFrom` (string): Optional. Keep events that start on or after this date (YYYY-MM-DD, event local time). - `dateTo` (string): Optional. Keep events that start on or before this date (YYYY-MM-DD, event local time). - `online` (boolean): Optional. On: only online events. Off: only in-person events. Leave empty to get both. - `maxItems` (integer): Maximum events in the result, across all sites. Each saved event is charged, plus a small start fee per run. ## Step by step on Apify 1. Open the Input tab. The form is prefilled with City `London`, Country code `GB`, keyword `AI` and 20 events. 2. Change City if you want. When you change the city, also change Country code (for example `Berlin` + `DE`, `Austin` + `US` + state `TX`). 3. Click Start. 4. Open the Output tab and choose the Events view. Click `url` to open an event. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Weekly city event list | `location`, `countryCode`, `dateFrom`, `dateTo` | Event | `title`, `startAt`, `venue`, `url` | Google Sheets, newsletter | | Topic events for outreach | `keywords` (for example `["AI","startup"]`) | Event | `title`, `organizer`, `url` | CRM, spreadsheet | | Online events only | `location`: `Online`, `keywords` | Event | `title`, `startAt`, `timezone`, `url` | Calendar, Slack | | Free events for a community | `location`, `countryCode`, then filter `isFree` | Event | `isFree`, `price`, `venue`, `url` | Spreadsheet | ## Tips - Luma works in about 85 big cities. Other cities are skipped, not failed. - Add a country code to get Meetup results. - An empty price means unknown, not free. Check the free flag. ## Limits - Up to 500 events per run. A run usually takes 10 seconds to 2 minutes and stops by itself after about 4 minutes. - Smaller cities and narrow keywords return fewer events. The Actor stops a search when new pages bring no matching events. - The sites can change their pages or limit requests. A failed site does not stop the other sites. ## Sample result ```json { "source": "eventbrite", "eventId": "1993713935049", "title": "BookPeople Presents: Adam Grant - Vibe", "url": "https://www.eventbrite.com/e/bookpeople-presents-adam-grant-vibe-tickets-1993713935049", "startAt": "2026-10-26T18:00:00-05:00", "endAt": "2026-10-26T19:00:00-05:00", "timezone": "America/Chicago", "venue": "AISD Performing Arts Center", "address": "1500 Barbara Jordan Boulevard, Austin, TX 78723", "city": "Austin", "country": "US", "online": false, "organizer": "BookPeople", "price": 49.95, "currency": "USD", "isFree": false, "category": "Hobbies & Special Interest", "description": "BookPeople welcomes Adam Grant in conversation with Matthew McConaughey to celebrate the release of Vibe.", "sourceUrl": "https://www.eventbrite.com/d/tx--austin/all-events/", "fetchedAt": "2026-10-14T15:03:29.735Z" } ``` ## Use it from code Actor ID: `cliqtomedia/events-aggregator` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/events-aggregator").call(run_input={ "location": "London", "countryCode": "GB" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~events-aggregator/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"location": "London", "countryCode": "GB"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/events-aggregator") result = tool.invoke({"run_input": {"location": "London", "countryCode": "GB"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [99acres & MagicBricks India Property Scraper - No Login](https://cliqtomedia.com/actors/india-property-listings/) - [Google Flights Scraper - Prices & Times, No Login](https://cliqtomedia.com/actors/google-flights-scraper/) - [Redfin & Realtor Listings Scraper (US): Sale, Sold & Rent](https://cliqtomedia.com/actors/us-property-listings/) --- # FDA Recalls Export and Monitor > FDA recalls API tool for food, drugs and medical devices from openFDA. Filter by class, firm and state. See new and updated recalls since your last run. URL: https://cliqtomedia.com/actors/fda-recalls-enforcement-monitor/ Category: Government & open data · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Get FDA recalls for food, drugs and medical devices in one table. Filter by class, firm, product, reason and state. Mark which recalls are new or changed since last time. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `food` in Product categories. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does FDA Recalls & Enforcement Monitor searches FDA recalls of food, drugs and medical devices in the official FDA Enforcement Reports, through the openFDA API. Filter by recall class, status, dates, firm, product, reason and firm state. You get one clean row per recalled product, with the four FDA dates kept apart, the recall number, the firm, the reason and a link to the record in openFDA. - One request per category. Each category you pick is one search, newest records first. `maxResults` applies to each category. - Four dates, never mixed. `recallInitiationDate` (the firm started the recall), `centerClassificationDate` (FDA set the class), `reportDate` (FDA published it in the Enforcement Report) and `terminationDate` (FDA closed it). You choose which date your range uses. - Not yet classified recalls. The newest recalls appear before FDA gives them a class and a recall number. You can include or skip them. They get a stable `recallKey` anyway. - Monitoring. With a `monitorKey`, the Actor saves the recalls it saw in your account. The next run marks each recall `new`, `updated` (for example the status changed to `Terminated`) or `unchanged`, and by default writes only new and updated ones. ### Good for - Get a weekly list of new Class I food recalls for your quality or safety team. - Check if a supplier, brand or competitor had FDA recalls, by firm name. - Find recalls by reason: `Listeria`, `undeclared peanut`, `sterility`, `mislabeling`. - Watch medical device or drug recalls of one firm state, such as `CA` or `NJ`. - Feed FDA recall rows into a spreadsheet, a dashboard or an AI agent. ### Not a good fit - Official consumer alerts or a guarantee that you see every recall in time. FDA publishes Enforcement Reports weekly, and a recall can appear later than the firm's press release. - Full recall lifecycle tracking. The Actor sees only what the Enforcement Report says on the day of the run. - Cosmetics or tobacco as separate categories, animal food recall press releases, and device recall details from the separate device recall database. - A full copy of all FDA recalls since 2004. Use the openFDA downloads for that. ## Price Prices will be shown after release. ## Questions ### Where does the recall data come from? From openFDA, the official open data API of the US FDA. The records are FDA Enforcement Reports. ### What do Class I, II and III mean? Class I is the most serious risk. Class II is a temporary or reversible risk. Class III is unlikely to cause health problems. ### Do I need an openFDA API key? No. A free key is optional. It only gives you your own request limit. ### Is this medical advice? No. It is FDA data as published. Ask FDA, the firm or your doctor about a product you use. ### How fresh is the data? Each run reads openFDA live. openFDA updates the enforcement data about once a week, after FDA publishes the Enforcement Report. Firm press releases can come earlier. ### Does monitoring cost more? No. Unchanged recalls are not written and not charged when `onlyChanges` is on. ### Why are there no device codes like GMDN? GMDN terms have their own licence, so the Actor does not output openFDA device classification data. If a firm wrote a code into its own `codeInfo` text, it stays as FDA published it. ## Data fields - `changeType` (string): Change since the baseline: initial (first monitored run), new, updated or unchanged. null when no monitorKey/previousDatasetId is used. - `changedFields` (array): For updated recalls: which tracked fields changed (status, classification, terminationDate, the other dates, firm, product, quantity, code info, reason, distribution, voluntaryMandated). - `previousValues` (object): For updated recalls: previous value of each changed field. - `recallKey` (string): Stable key: category:recallNumber, e.g. food:F-0123-2026; for not-yet-classified recalls category:unclassified:eventId:hash. Use it to deduplicate and join. - `recallNumber` (string): FDA recall number, e.g. F-0123-2026 (food), D-0860-2026 (drug), Z-3247-2026 (device). null while FDA has not classified the recall yet. - `eventId` (string): FDA recall event ID. One event (one firm action) can cover several products, each with its own recall number. - `category` (string): openFDA enforcement category searched: food, drug or device. - `productType` (string): Product type as reported by FDA, e.g. Food/Cosmetics, Drugs, Devices. - `classification` (string): FDA classification text: Class I, Class II, Class III or Not Yet Classified. - `recallClass` (string): Short class: I, II or III; null when not yet classified. - `status` (string): Recall status: Ongoing, Completed or Terminated. - `recallingFirm` (string): Firm that initiated the recall. - `productDescription` (string): Product as described in the enforcement report. - `productQuantity` (string): Quantity of product recalled, as free text. - `codeInfo` (string): Lot numbers, codes, expiry dates identifying the recalled units. - `moreCodeInfo` (string): Continuation of codeInfo when FDA splits it. - `reasonForRecall` (string): Reason for the recall, as written by FDA. - `distributionPattern` (string): Where the product was distributed, as free text (states, countries, nationwide). - `voluntaryMandated` (string): Voluntary: Firm initiated, or FDA Mandated. null when FDA reports N/A or nothing. - `initialFirmNotification` (string): How the firm first notified consignees, e.g. Letter, E-Mail, Press Release. - `recallInitiationDate` (string): Date the firm started the recall (YYYY-MM-DD, calendar date without time zone). - `centerClassificationDate` (string): Date the FDA center classified the recall (YYYY-MM-DD). - `reportDate` (string): Date FDA published the recall in its weekly Enforcement Report (YYYY-MM-DD). - `terminationDate` (string): Date FDA terminated the recall (YYYY-MM-DD); null while it is not terminated. - `address1` (string): Recalling firm address line 1. - `address2` (string): Recalling firm address line 2. - `city` (string): Recalling firm city. - `state` (string): Recalling firm state (2-letter code for US firms). - `postalCode` (string): Recalling firm postal code. - `country` (string): Recalling firm country. - `drugBrandNames` (array): Drug recalls only: brand names linked by openFDA. null for food and device rows. - `drugGenericNames` (array): Drug recalls only: generic names linked by openFDA. - `drugProductNdcs` (array): Drug recalls only: product NDC codes linked by openFDA. - `sourceUrl` (string): openFDA API query returning this recall (by recall number; by event ID while not yet classified). - `provider` (string): Data provider: openFDA (U.S. Food and Drug Administration). - `sourceUpdatedAt` (string): openFDA dataset last_updated date at fetch time (YYYY-MM-DD). - `fetchedAt` (string): When this run fetched the record (ISO 8601 UTC). ## Input settings - `categories` (array): Which openFDA enforcement reports to search: food (also cosmetics and dietary supplements), drug, device. Each category is one request. Default: food. - `classifications` (array): FDA recall class. Class I: reasonable probability of serious health consequences or death. Class II: temporary or medically reversible consequences. Class III: unlikely to cause adverse health consequences. Not yet classified: newest recalls FDA has listed before assigning a class and a recall number. Empty = all. - `statuses` (array): Ongoing, Completed or Terminated. Empty = all statuses. - `lookbackDays` (integer): Date range ending today (or dateTo), 1–90 days. Ignored when dateFrom is set. Default 30. - `dateField` (string): report_date: when FDA published the recall in its weekly Enforcement Report (default, best for monitoring). recall_initiation_date: when the firm started the recall. center_classification_date: when FDA classified it. termination_date: when FDA terminated it (use to catch closed recalls). - `dateFrom` (string): Optional start date (YYYY-MM-DD). The whole range may span at most 90 days; split longer periods into several runs. - `dateTo` (string): Optional end date (YYYY-MM-DD). Default: today (UTC). - `firmNames` (array): Up to 10 firm names, matched as a phrase in the recalling firm name, e.g. Whole Foods matches Whole Foods Market Group Inc. - `productQuery` (string): Optional phrase searched in the product description, e.g. ice cream or insulin pump. 2–120 characters. - `reasonQuery` (string): Optional phrase searched in the reason for recall, e.g. Listeria, undeclared peanut, sterility. 2–120 characters. - `firmStates` (array): Up to 20 two-letter US state codes of the recalling firm, e.g. CA, TX. This is where the firm is, not where the product was distributed. - `maxResults` (integer): Newest first, 1–1000 per category. Each recall row is one charged result. Default 100. - `monitorKey` (string): Optional name, 1–40 letters, digits or dashes, e.g. food-class-1. The Actor stores the recalls it saw under this key in your account, and the next run with the same key marks each recall new, updated (for example a status change) or unchanged. The first run marks rows initial. Use one key per saved search. - `previousDatasetId` (string): Alternative to monitorKey: ID of an earlier run's default Dataset from this Actor. Rows are compared with it. - `onlyChanges` (boolean): With a monitorKey or previousDatasetId, skip unchanged recalls (they are not written and not charged). Default true. - `openFdaApiKey` (string): Optional free key from open.fda.gov/apis/authentication. Without it openFDA allows a limited number of requests per IP address per day, shared with other users of the same IP. The key is never written to the output or logs. ## Step by step on Apify 1. Open the Input tab. The form already has an example: food, Class I, last 30 days, 20 recalls. 2. Click Start. 3. Open the Recalls view in the Output tab. Check `recallNumber`, `recallingFirm`, `productDescription`, `reasonForRecall` and `reportDate`. 4. Change the categories, classes or filters to your own. To get only changes next time, add a `monitorKey` such as `food-class-1`. ## Use cases | Task | Input | You get | Key fields | |---|---|---|---| | Weekly food safety watch | `categories: ["food"]`, `classifications: ["I"]`, `monitorKey`, on a schedule | only new and updated Class I recalls | `changeType`, `reasonForRecall`, `distributionPattern` | | Supplier check | `firmNames`, all categories, a 90-day range | that firm's recalls | `recallingFirm`, `productDescription`, `status` | | Allergen or pathogen research | `reasonQuery: "Listeria"` or `"undeclared peanut"` | matching recalls | `reasonForRecall`, `codeInfo`, `productQuantity` | | Medical device recall search | `categories: ["device"]`, `productQuery`, `firmStates` | device recall rows | `recallNumber`, `classification`, `centerClassificationDate` | | Drug recall list with NDCs | `categories: ["drug"]` | drug rows | `drugBrandNames`, `drugGenericNames`, `drugProductNdcs` | | Closed recalls | `dateField: "termination_date"` | recalls FDA terminated in the range | `terminationDate`, `status` | ## Tips - Pick which date your range uses. FDA keeps four different dates per recall. - Use a monitor key to get only new and updated recalls each week. - openFDA updates about once a week, so a weekly run is often enough. ## Limits - Up to 1,000 recalls per category and 3 categories, so up to 3,000 rows per run. In our test, 2,541 rows took about 4 seconds. - The date range is at most 90 days. Enforcement Reports start in 2004. - Without a key, openFDA limits requests per IP address per day, and the IP can be shared with other users. Each category is one request. If openFDA refuses with a rate limit, the run stops with `ERROR` and a hint. Add your free `openFdaApiKey` to get your own quota. - If openFDA does not answer (up to 30 seconds per try, at most 3 tries and 2 timeouts), the run stops early and does not ask for the other categories. You get the rows found so far. The internal time budget is 240 seconds. - Monitor snapshots keep up to 20,000 recalls per `monitorKey`. `previousDatasetId` reads up to 20,000 rows. - Not yet classified recalls have no recall number. When FDA classifies them, they come back with a recall number as a `new` row with a new `recallKey`. - `firmStates` is the firm's address, not where the product was sold. - openFDA updates the enforcement data about once a week. `sourceUpdatedAt` shows the last update. ## Sample result ```json { "recallKey": "food:H-1395-2026", "recallNumber": "H-1395-2026", "eventId": "99874", "category": "food", "classification": "Class I", "recallClass": "I", "status": "Ongoing", "recallingFirm": "WFM Purchasing, LP", "productDescription": "Fromagerie Coop de Mean Cabricharme and Belgium Cabricharme ...", "productQuantity": "21 Wheels", "reasonForRecall": "Undeclared Egg Allergen", "distributionPattern": "CA, AZ, NJ, MA, RI, CT, NY", "recallInitiationDate": "2026-09-08", "centerClassificationDate": "2026-09-22", "reportDate": "2026-09-30", "terminationDate": null, "city": "Austin", "state": "TX", "changeType": null, "sourceUrl": "https://api.fda.gov/food/enforcement.json?search=recall_number%3A%22H-1395-2026%22", "provider": "openFDA (U.S. Food and Drug Administration)", "sourceUpdatedAt": "2026-09-30", "fetchedAt": "2026-10-12T10:54:50.382Z" } ``` ## Similar tools - [VIN Decoder & Vehicle Recalls](https://cliqtomedia.com/actors/vin-decoder-vehicle-recalls/) - [USAspending Federal Awards & Recipient Monitor](https://cliqtomedia.com/actors/usaspending-federal-awards-monitor/) - [EU TED Tenders Scraper & Monitor](https://cliqtomedia.com/actors/eu-ted-tenders-scraper/) - [UK Bank Holidays & Business Day Calculator](https://cliqtomedia.com/actors/uk-bank-holidays-business-days/) - [UK Postcode Lookup](https://cliqtomedia.com/actors/gb-postcode-lookup/) - [NASA POWER Historical Weather & Solar Data](https://cliqtomedia.com/actors/nasa-power-climate-data/) --- # Finnish company register lookup with PRH YTJ open data > Finnish company register API with PRH YTJ open data. Check a Y-tunnus or search by name, town or business line. Get status, names and addresses. URL: https://cliqtomedia.com/actors/finland-ytj-company-register/ Category: Leads, companies & validation · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Check Finnish companies by Business ID (Y-tunnus), or search by name and town. You get the official name, name history, form, status and addresses. The data comes from PRH open data. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `0112038-9` in Business IDs (Y-tunnus). Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Finland Company Register (PRH YTJ) looks up Finnish companies in the official YTJ open data register of the Finnish Patent and Registration Office (PRH) and the Finnish Tax Administration. Add Finnish Business IDs (Y-tunnus), or search by company name, town, company form, business line, postcode or registration date. You get one clean row per company: name and full name history, company form, main business line, register entries, addresses, website and a clear status: active, ceased, bankrupt or not found. - Business ID lookup. Each Business ID is an exact match. The Actor checks the check digit first. A wrong ID gives an `invalid_input` row, and a valid ID that is not in the register gives a `not_found` row, so no input is lost. The same ID written twice is looked up once. - Search. Filters by company name, town, company form, main business line, postcode and registration dates. The source decides the order of results. ### Good for - Check that a Finnish supplier or customer exists and is still active (KYB, onboarding). - See all names of a company: current, previous, parallel (Swedish or English) and auxiliary names, with dates. - Fill CRM records with the official name, company form, TOL 2008 business line, address and website. - Build a list of companies by town, form, business line or registration date. ### Not a good fit - Email addresses and phone numbers. The register does not publish them, and the Actor does not add them. - Directors, owners, beneficial owners or financial statements. They are not in this open data. - Proof that a VAT number is valid on a date. `inVatRegister` shows a VAT register entry in YTJ. For a VAT check, use the EU VIES service. - Private traders (sole proprietors). The open data covers companies registered or pending in the Trade Register, not private traders. - Norwegian, Swedish or other Nordic companies. This Actor covers Finland only. ## Price Prices will be shown after release. ## Questions ### Do I need an API key for YTJ? No. The open data is free. You only need an Apify account. ### Does it show emails, phones or directors? No. The open data does not include them. ### Can I use the data for business? Yes. It is under CC BY 4.0, which allows commercial reuse with attribution. ### Does it prove a VAT number is valid? No. Use the EU VIES service for a VAT check on a date. ### Do I need an API key or a Finnish account? No. The source is open and free. You only need your Apify account. ### Does a VAT register entry mean the VAT number is valid today? No. `inVatRegister` shows that YTJ has a current VAT register entry for the company. To check a VAT number on a date, use the EU VIES service. ### Why are there no emails or phone numbers? PRH open data does not publish them. The Actor gives only what the register publishes. ### How fresh is the data? Each run reads the source live. The source updates once a day. Each row has `fetchedAt` (our read time) and `lastModified` (when the source last changed the record). ## Data fields - `inputBusinessId` (string): Your input value as given (lookup mode); null for search rows. - `status` (string): Row result: complete (company found), not_found (valid Business ID not in YTJ open data), invalid_input (not a valid Business ID, not charged) or error (source problem, not charged). - `statusReason` (string): Plain-English reason for not_found, invalid_input and error rows; null when complete. - `businessId` (string): Finnish Business ID (Y-tunnus) as text with the leading zero, e.g. 0112038-9. - `name` (string): Current official company name. - `isActive` (boolean): true = valid Business ID, not dissolved, not removed or ceased on the Trade Register and not in bankruptcy or liquidation. null when unknown. - `businessIdStatus` (string): Business ID status label, e.g. Valid, Pending, Invalidated. - `businessIdStatusCode` (string): Business ID status code from the source (1 pending, 2 valid, 5 invalidated). - `tradeRegisterStatus` (string): Trade Register status label, e.g. Registered, Ceased, Removed, Start-up not registered. - `tradeRegisterStatusCode` (string): Trade Register status code from the source. - `companyForm` (string): Current company form, e.g. Limited company; for a dissolved company the last known form. - `companyFormCode` (string): Numeric company form code from the source. - `companyFormAbbreviation` (string): Company form abbreviation, e.g. OY, OYJ, KY, AY, TMI. - `mainBusinessLineCode` (string): Main business line code (TOL 2008), e.g. 70100. - `mainBusinessLine` (string): Main business line description in the chosen language. - `mainBusinessLineCodeSet` (string): Code set of the main business line (TOIMI…). - `website` (string): Website as registered (not verified). - `registrationDate` (string): Company registration date, YYYY-MM-DD. - `endDate` (string): Company end (dissolution) date, YYYY-MM-DD; null when not ended. - `businessIdRegistrationDate` (string): Date the Business ID was granted, YYYY-MM-DD. - `euId` (string): EUID (European unique identifier) when published. - `inTradeRegister` (boolean): Currently registered in the Trade Register. - `inVatRegister` (boolean): Currently has a VAT register entry. This is the YTJ register entry, not a VIES check of VAT validity on a given date. - `inEmployerRegister` (boolean): Currently in the employer register. - `inPrepaymentRegister` (boolean): Currently in the prepayment (tax) register. - `currentSituations` (array): Current special situations: KONK (bankrupt), SELTILA (liquidation), SANE (restructuring). - `streetAddress` (object): Visiting (street) address; city in the chosen language with Finnish and Swedish variants. - `postalAddress` (object): Postal address; city in the chosen language with Finnish and Swedish variants. - `previousNames` (array): Earlier official names. - `parallelNames` (array): Current parallel names (other language versions of the official name). - `auxiliaryNames` (array): Current auxiliary (trade) names. - `names` (array): All names with type, registration and end dates (current and historical). - `companyForms` (array): Company form history with dates. - `situations` (array): Bankruptcy, liquidation and restructuring entries with dates. - `registeredEntries` (array): Register entries (Trade Register, VAT, employer, prepayment, foundations, associations…) with status and dates. - `lastModified` (string): Last change of this company in the source (Finnish local time, as published). - `ytjUrl` (string): Public company page in the YTJ information service. - `sourceUrl` (string): Exact API request that produced this row. - `provider` (string): Data provider. - `licence` (string): Data licence (CC BY 4.0). ## Input settings - `businessIds` (array): Exact lookup of up to 100 Finnish Business IDs, e.g. 0112038-9. Also accepts 01120389, the old six-digit form and FI VAT numbers (FI01120389). Wrong check digits are reported as invalid_input (free). Duplicates are looked up once. Leave empty to run a search instead. - `name` (string): Search filter, not combinable with Business IDs. Matches current and earlier names, at least 2 characters, e.g. nokia. - `location` (string): Search filter: town/city of the registered address, e.g. Helsinki, Espoo or Tampere. - `companyForm` (string): Search filter: company form, e.g. OY (limited company) or OYJ (public limited company). - `mainBusinessLine` (string): Search filter: TOL 2008 code (e.g. 62010) or text from its description (e.g. software). - `postCode` (string): Search filter: 5-digit Finnish postcode, e.g. 00100. - `registrationDateFrom` (string): Search filter: company registration date from (inclusive), YYYY-MM-DD. - `registrationDateTo` (string): Search filter: company registration date to (inclusive), YYYY-MM-DD. - `maxResults` (integer): Search mode only. Maximum companies returned, 1–5000. Default 100. Each company row is charged. - `language` (string): Language of labels (company form, statuses, business line, city). Values the source has only in Finnish fall back to Finnish. ## Step by step on Apify 1. Open the Input tab. The form already has three Business IDs: Nokia Oyj (active), Nokia Networks Oy (ceased) and Primera Holidays Oy (bankrupt). 2. Click Start. 3. Open the Companies view in the Output tab. Check `name`, `isActive`, `tradeRegisterStatus` and `currentSituations`. 4. Replace the IDs with your own list (up to 100), or clear the list and use the search filters. ## Use cases | Task | Input | Key fields | |---|---|---| | Verify a company (KYB) | `businessIds` | `status`, `isActive`, `tradeRegisterStatus`, `currentSituations`, `endDate` | | Match old invoices or contracts to a company | `businessIds` or `name` | `names`, `previousNames`, `parallelNames`, `auxiliaryNames` | | Clean CRM records | `businessIds` | `name`, `companyForm`, `mainBusinessLine`, `streetAddress`, `website` | | Prospect list by town and activity | `location` + `mainBusinessLine` | `businessId`, `name`, `registrationDate`, `postalAddress` | | New companies in a period | `registrationDateFrom` / `registrationDateTo` + filters | `registrationDate`, `companyForm`, `streetAddress` | ## Tips - You can paste IDs with or without the dash, or as FI VAT numbers. - Add filters to a search. Helsinki alone has about 90,000 companies. - New companies can be missing until the next daily update. ## Limits - Up to 100 Business IDs per run, or up to 5,000 companies per search. A town like Helsinki has about 90,000 companies, so add filters to narrow a search. - The Actor sends about one request per second, because the source blocks fast clients for a while. 100 Business IDs take about 100 seconds; a 5,000-company search took about 90 seconds in our test. - The source updates once a day. A company registered today can be `not_found` until the next update. - The internal time budget is 240 seconds and 700 requests. When a run reaches it, the run stops with `CAPPED` and the rows found so far are kept. - If the source fails or blocks the run, the Actor stops after two failed requests in a row. The rest of the IDs get free `error` rows and the run is `PARTIAL` or `ERROR`. Run those IDs again later. - Search pages can hold fewer than 100 companies. If the source serves fewer unique companies than it reports, `RUN_SUMMARY.warnings` says so. ## Sample result ```json { "inputBusinessId": "0112038-9", "status": "complete", "businessId": "0112038-9", "name": "Nokia Oyj", "isActive": true, "tradeRegisterStatus": "Registered", "companyFormAbbreviation": "OYJ", "mainBusinessLineCode": "70100", "mainBusinessLine": "Activities of head offices", "website": "www.nokia.com", "registrationDate": "1896-12-19", "inVatRegister": true, "currentSituations": [], "streetAddress": { "formatted": "Karakaari 7, 02610 ESPOO", "postCode": "02610", "city": "ESPOO", "citySv": "ESBO" }, "previousNames": ["Oy Nokia Ab"], "parallelNames": ["Nokia Abp", "Nokia Corporation"], "names": [ { "name": "Oy Nokia Ab", "type": "Company name", "typeCode": "1", "registrationDate": "1966-06-10", "endDate": "1997-08-31", "current": false } ], "lastModified": "2026-08-19T10:04:06", "ytjUrl": "https://tietopalvelu.ytj.fi/yritys/0112038-9", "licence": "CC BY 4.0", "fetchedAt": "2026-10-12T09:21:05.000Z" } ``` ## Use cases with this tool - [Lead lists from public data](https://cliqtomedia.com/actors/use-cases/lead-generation/): Build lists of companies and contacts from public sites. Check emails and phones before you send. ## Similar tools - [France Company & SIRET Search](https://cliqtomedia.com/actors/france-sirene-company-search/) - [Norway Company Register (Brreg) & Updates](https://cliqtomedia.com/actors/norway-brreg-company-register/) - [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/) - [Bulk Email Verifier: MX, Disposable, Role & Typo Check](https://cliqtomedia.com/actors/email-verifier/) - [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/) - [EU VAT Number Validator (VIES) - Bulk Check, No Login](https://cliqtomedia.com/actors/vat-number-validator/) --- # SIRET lookup and French company search with Sirene data > SIRET lookup and French company search with official Sirene data. Check SIREN, SIRET or VAT numbers, or search by name. Get status and head office. URL: https://cliqtomedia.com/actors/france-sirene-company-search/ Category: Leads, companies & validation · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/france-sirene-company-search?fpr=cliqto Check French companies by SIREN, SIRET or VAT number. Or search by name with area and NAF filters. You get legal form, activity, head office and a clear status. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `552081317` in SIREN / SIRET / VAT numbers. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does France Company & SIRET Search looks up French companies in the official Sirene directory. Add SIREN, SIRET or French VAT numbers, or search by company name with department, postal code, NAF code and status filters. You get one clean row per company, with legal form, NAF activity, size, dates, head office and a clear status: active, ceased or not found. - Identifier lookup. Each SIREN, SIRET or VAT number is an exact match. A SIRET also returns that establishment. A wrong or unknown number returns a `not_found` row, so no input is lost. - Name search. A full-text search on company names, brands and addresses, with filters. Results are ranked by the source. Check `siren` and `name` before you use a search result as a verified match. ### Good for - Check that a supplier or customer exists and is still active (KYB, onboarding). - Fill CRM records with the official name, legal form, NAF code, VAT number and head office. - Build a list of companies in a department or with a NAF code. - Find the open and closed establishments of a company. ### Not a good fit - Directors, shareholders, phone numbers or emails. The Actor does not output them. Note: a sole trader (entrepreneur individuel) is registered under a person's name, and Sirene shows that name as the company name, unless the person hid it. - Companies that asked to hide their data (non-diffusible). The public API does not serve them. - A full copy of the Sirene database. Use the official Sirene files for bulk downloads. - Legal certificates such as a Kbis extract. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.002 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Company record | $0.0072 | One found French company (complete or partial row) saved to the Dataset. | | Not-found lookup | $0.001 | One valid SIREN/SIRET/VAT lookup that is not in the public Sirene index, saved as a not_found row. | | Establishment record | $0.0003 | One establishment (SIRET) row saved to the Dataset when establishments are requested or a SIRET is looked up. | - One company: about $0.0092. - 1,000 companies: about $7.20. - Every day 100 companies, for 30 days: about $21.66 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/france-sirene-company-search?fpr=cliqto ## Questions ### Do I need an INSEE API key? No. The source is open and free. You only need an Apify account. ### Are company directors included? No. They are personal data. The tool gives company data only. ### Can I get a Kbis extract? No. The tool gives public register data, not legal certificates. ### Can I reuse the data commercially? Yes. Sirene data is under Licence Ouverte 2.0, with attribution. ### Do I need an API key or a French account? No. The source is open and free. You only need your Apify account. ### Is a search result a verified match? No. Search is fuzzy. For verification, use the SIREN or SIRET. Exact lookups show `matchedBy: "siren_exact"` or `"siret_exact"`. ### How fresh is the data? Each run reads the source live. Each row has `fetchedAt` (our read time) and `sourceUpdatedAt` (the source update time of that record). ## Data fields - `recordType` (string): Row type: company or establishment. Filter on it, or use the Companies / Establishments view. - `status` (string): Row result: complete, partial, not_found or error. See statusReason and errorCode. - `statusReason` (string): Plain-English reason for a partial, not_found or error row; null when complete. - `errorCode` (string): Machine code for error rows, e.g. INVALID_IDENTIFIER, RATE_LIMITED, SOURCE_UNAVAILABLE; null otherwise. - `input` (string): Your input value as given (identifier), or null for search rows. - `matchedBy` (string): How the row was found: siren_exact, siret_exact, search; for establishments also head_office, company_establishments, search_match. - `siren` (string): 9-digit SIREN company number. - `siret` (string): 14-digit SIRET establishment number (establishment rows). - `companyName` (string): Name of the parent company (establishment rows). - `isHeadOffice` (boolean): true if this establishment is the current head office (siège). - `wasHeadOffice` (boolean): true if this establishment was a head office in the past. - `administrativeStatus` (string): Company: active or ceased. Establishment: active or closed. - `administrativeStatusCode` (string): INSEE code: A (active), C (ceased company) or F (closed establishment). - `creationDate` (string): Creation date, YYYY-MM-DD. - `activityStartDate` (string): Start date of the establishment activity, YYYY-MM-DD. - `closureDate` (string): Closure date, YYYY-MM-DD; null if active. - `address` (string): Full establishment address as one line; null if hidden. - `postalCode` (string): 5-digit postal code of the establishment. - `city` (string): City of the establishment. - `communeCode` (string): INSEE commune code of the establishment. - `department` (string): Department code of the establishment, e.g. 75, 2A, 971. - `region` (string): INSEE region code of the establishment. - `latitude` (number): Latitude (WGS84) of the establishment; null if unknown or hidden. - `longitude` (number): Longitude (WGS84) of the establishment; null if unknown or hidden. - `nafCode` (string): Main activity, NAF rev. 2 code, e.g. 62.01Z. - `nafVersion` (string): NAF nomenclature of nafCode, e.g. NAFRev2. - `nafLabel` (string): French label of nafCode. - `naf2025Code` (string): Main activity in the new NAF 2025 nomenclature; temporary source field, can be null. - `employeeRangeCode` (string): INSEE headcount band code (tranche d'effectif). - `employeeRangeLabel` (string): Headcount band label, e.g. 10 000 salariés et plus. - `employeeRangeYear` (number): Year of the headcount band. - `isEmployer` (boolean): Employer flag from the source; often null at company level. - `tradeNames` (array): Trade names (enseignes) of the establishment. - `commercialName` (string): Commercial name (dénomination usuelle) of the establishment. - `diffusionStatus` (string): public, or partial when some data is hidden by law (non-diffusible fields). - `hiddenFields` (array): Fields hidden by the source for privacy; they are null in this row. - `annuaireUrl` (string): Public page on annuaire-entreprises.data.gouv.fr. - `source` (string): Data source name and licence. - `sourceUrl` (string): Source API URL used for this row. - `fetchedAt` (string): When the Actor read the source, ISO 8601 UTC. ## Input settings - `identifiers` (array): Exact lookup of up to 100 French company numbers: SIREN (9 digits, e.g. 552081317), SIRET (14 digits, e.g. 55208131766522) or French VAT number (FR + 2 characters + SIREN, e.g. FR03552081317). Spaces, dots and dashes are ignored; duplicates are looked up once. Never a fuzzy name match. Leave empty to run a name search instead. - `query` (string): Fuzzy full-text search on company names, brands, acronyms and addresses, e.g. boulangerie or Michelin. 3–200 characters (shorter is allowed with a filter). Cannot be combined with identifiers (the run is rejected with INVALID_INPUT). Results are ranked by the source: check siren and name before treating one as a verified match. - `departments` (array): Search filter, not combinable with identifiers. Up to 20 French department codes: 01–95, 2A, 2B, 971–976, e.g. 75 or 69. Keeps companies with at least one establishment there. Default: empty (all of France). - `postalCodes` (array): Search filter, not combinable with identifiers. Up to 20 five-digit postal codes, e.g. 75008. Keeps companies with at least one establishment there. Default: empty. - `nafCodes` (array): Search filter, not combinable with identifiers. Up to 20 NAF rev. 2 activity codes, with or without the dot, e.g. 62.01Z or 6201Z. Unknown codes and NAF 2025 codes are rejected with INVALID_INPUT. Default: empty. - `companyStatus` (string): Search filter on company status: any (default), active or ceased. Active or ceased cannot be combined with identifiers. - `maxResults` (integer): Search mode only. Maximum companies returned, 1–100. Default 25. Each company row is charged. - `includeEstablishments` (boolean): Add one row per establishment (SIRET: address, status, head-office flag, NAF, trade names). For identifiers: the head office plus establishments listed by the source; for a search: the establishments that matched the search. Default false. Each found establishment row is charged. - `maxEstablishmentsPerCompany` (integer): Maximum establishment rows per company, 1–100. Default 20. The company row shows establishmentsTotal and establishmentsComplete so you know when the list is a subset. Used only with includeEstablishments. ## Step by step on Apify 1. Open the Input tab. The form already has three SIREN numbers: EDF, TotalEnergies and LVMH. 2. Click Start. 3. Open the Companies view in the Output tab. Check `name`, `administrativeStatus` and `headOfficeAddress`. 4. Replace the numbers with your own list (up to 100). Turn on Include establishments if you need SIRET rows. ## Use cases | Task | Input | You get | Key fields | |---|---|---|---| | Verify a company (KYB) | `identifiers` | company row | `status`, `administrativeStatus`, `closureDate`, `legalFormLabel` | | Clean CRM records | `identifiers` (SIREN, SIRET or VAT) | company row | `name`, `vatNumber`, `nafCode`, `headOfficeAddress` | | Map a company's sites | `identifiers` + `includeEstablishments` | establishment rows | `siret`, `address`, `administrativeStatus`, `isHeadOffice` | | Prospect list by area and activity | `query` + `departments` / `nafCodes` | company rows | `name`, `employeeRangeLabel`, `companyCategory`, `searchRank` | ## Tips - Use SIREN or SIRET for checks. Name search is fuzzy. - A SIRET also returns that one establishment of the company. - Spaces, dots and dashes in numbers are fine. The tool removes them. ## Limits - Up to 100 identifiers per run, or up to 100 companies per search. - Up to 100 establishments per company. The source cannot list more. Check `establishmentsComplete`: in our test of 100 transport companies, 96 had their full list. - In search mode, establishments are the ones that matched your search or filters, not all establishments of the company. - The Actor sends at most about 3 requests per second. The source allows 7 per second per IP and shares a limit across cloud providers, so a busy moment can give `RATE_LIMITED` rows. Run them again later. - Internal time budget is 240 seconds. 100 identifiers with establishments took 94 seconds in our test. - `naf2025Code` is a temporary field of the source. The source says it may be removed after 2027-01-01. ## Sample result ```json { "recordType": "company", "status": "complete", "input": "552100554", "matchedBy": "siren_exact", "siren": "552100554", "name": "PEUGEOT SA", "legalFormLabel": "SA à directoire (s.a.i.)", "nafCode": "70.10Z", "nafVersion": "NAFRev2", "naf2025Code": null, "administrativeStatus": "ceased", "creationDate": "1955-01-01", "closureDate": "2021-01-16", "vatNumber": null, "establishmentsTotal": 5, "establishmentsOpen": 0, "headOfficeSiret": "55210055400054", "headOfficeCity": "VELIZY-VILLACOUBLAY", "headOfficeStatus": "closed", "annuaireUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/552100554", "sourceUpdatedAt": "2026-10-08T09:06:03" } ``` ## Use it from code Actor ID: `cliqtomedia/france-sirene-company-search` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/france-sirene-company-search").call(run_input={ "identifiers": [ "552081317", "542051180", "775670417" ], "companyStatus": "any" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~france-sirene-company-search/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"identifiers": ["552081317", "542051180", "775670417"], "companyStatus": "any"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/france-sirene-company-search") result = tool.invoke({"run_input": {"identifiers": ["552081317", "542051180", "775670417"], "companyStatus": "any"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Lead lists from public data](https://cliqtomedia.com/actors/use-cases/lead-generation/): Build lists of companies and contacts from public sites. Check emails and phones before you send. ## Similar tools - [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/) - [Bulk Email Verifier: MX, Disposable, Role & Typo Check](https://cliqtomedia.com/actors/email-verifier/) - [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/) - [EU VAT Number Validator (VIES) - Bulk Check, No Login](https://cliqtomedia.com/actors/vat-number-validator/) - [Europages Scraper: B2B Suppliers & Certificates (No Login)](https://cliqtomedia.com/actors/europages-companies-scraper/) - [Norway Company Register (Brreg) & Updates](https://cliqtomedia.com/actors/norway-brreg-company-register/) --- # Bulk UK Postcode Lookup > Bulk UK postcode lookup for up to 1,000 postcodes. Get latitude, longitude, local authority, ward, constituency and LSOA codes. No API key. URL: https://cliqtomedia.com/actors/gb-postcode-lookup/ Category: Government & open data · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/gb-postcode-lookup?fpr=cliqto Paste a list of Great Britain postcodes and get map points and official area codes. Each row has a clear status, so bad postcodes are easy to find. Rows stay in your order. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `SW1A 2AA` in Postcodes. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Paste a list of Great Britain postcodes. UK Postcode Lookup returns one row per postcode with latitude/longitude, OS grid eastings/northings, local authority, ward, parliamentary constituency, LSOA/MSOA and their official GSS codes from the ONS Postcode Directory (via [Postcodes.io](https://postcodes.io/)). No login or API key is needed. ### Good for - Add map coordinates to a list of customer or store postcodes. - Join postcodes to ONS statistics with LSOA, MSOA, output area and district GSS codes. - Group leads by local authority, region or parliamentary constituency. - Find typos and old postcodes in a CRM export. ### Not a good fit - No Northern Ireland (BT) data. Its licence does not allow free commercial reuse. - No street addresses or house numbers. Coordinates are the postcode centre, not a building. - No reverse geocoding (coordinates → postcode) and no autocomplete. - Isle of Man (IM) and Channel Islands (GY, JE) postcodes return `found` but without coordinates or census areas. Some old IM postcodes are `terminated` without coordinates. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.002 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Postcode result | $0.01 (from $0.0085 on paid Apify plans) | One unique found or terminated Great Britain postcode with coordinates saved to the Dataset. Rows without a paid result are charged as Postcode checked; error rows are free. | | Postcode checked | $0.00005 | One answered row without a paid result: not found, invalid format, duplicate, Northern Ireland (not supported) or found without coordinates. Error rows are free. | - One postcode: about $0.01. - 1,000 postcodes: about $10.00. - Every day 100 postcodes, for 30 days: about $30.06 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/gb-postcode-lookup?fpr=cliqto ## Questions ### Does it cover Northern Ireland? No. BT postcodes are not included because of their licence. ### Can I get the street address? No. You get area data and the postcode centre, not house numbers. ### What happens with old postcodes? They show as terminated. You still get the last known location. ### Do I pay for bad postcodes? Error rows are free. Full price is only for found postcodes with coordinates. ### Do I need an API key or account for Postcodes.io? No. The Actor uses the public Postcodes.io API without a key. ### Why do terminated postcodes have no district or ward? The directory keeps only the last location and end date for old postcodes. Use `latitude`/`longitude` if you need an area. ### Is the data complete? It covers active and terminated postcodes in England, Scotland and Wales from the ONS Postcode Directory. Isle of Man and Channel Islands postcodes are listed but have no coordinates. Coordinates are postcode centres. Some areas, like county or parish, are empty where they do not apply. ## Data fields - `inputIndex` (integer): Position of the postcode in your input list (0-based). Rows come back in input order. - `input` (string): The postcode as you entered it, with leading and trailing spaces removed (items over 40 characters are cut). - `postcode` (string): Normalized postcode, e.g. SW1A 2AA (uppercase, one space). Null for invalid_format rows. - `status` (string): found (active postcode), terminated (no longer in use; last known location only), not_found, invalid_format, unsupported_licensed_region (Northern Ireland BT postcodes are not looked up) or error (source unavailable; not a negative answer). - `statusReason` (string): Plain-English explanation of the status. - `errorCode` (string): Machine code for error rows, e.g. SOURCE_UNAVAILABLE, RATE_LIMITED, DEADLINE_REACHED, MAX_CHARGE_REACHED; null otherwise. - `duplicateOfIndex` (integer): For a repeated postcode: inputIndex of its first occurrence (same data, not charged again). Null otherwise. - `latitude` (number): WGS84 latitude of the postcode centroid (not a specific address). Null when the source has no grid reference. - `longitude` (number): WGS84 longitude of the postcode centroid. - `eastings` (integer): OS National Grid easting in metres. - `northings` (integer): OS National Grid northing in metres. - `positionalQuality` (integer): ONSPD positional quality indicator 1–9 (1 = within the building of a matched address; 9 = no grid reference). - `outcode` (string): Outward code, e.g. SW1A. - `incode` (string): Inward code, e.g. 2AA. - `country` (string): England, Scotland, Wales (or Isle of Man / Channel Islands, without coordinates). - `region` (string): English region (former GOR), e.g. London. Null outside England. - `adminDistrict` (string): Local authority district / unitary authority, e.g. Westminster. - `adminDistrictCode` (string): GSS code of the district, e.g. E09000033. - `adminCounty` (string): County (two-tier areas only); null elsewhere. - `adminCountyCode` (string): GSS code of the county; null where not applicable. - `adminWard` (string): Electoral ward / division. - `adminWardCode` (string): GSS code of the ward. - `parish` (string): Civil parish or community (unparished areas are labelled as such). - `parishCode` (string): GSS code of the parish. - `parliamentaryConstituency` (string): Westminster parliamentary constituency (2024 boundaries). - `parliamentaryConstituencyCode` (string): GSS code of the constituency (2024 boundaries). - `lsoa` (string): Lower Layer Super Output Area name (2021 Census geography). - `lsoaCode` (string): LSOA GSS code, e.g. E01004736. - `msoa` (string): Middle Layer Super Output Area name. - `msoaCode` (string): MSOA GSS code. - `outputArea` (string): 2021 Census Output Area code. - `builtUpArea` (string): Built-up area name. - `policeForceArea` (string): Police force area. - `nhsIcb` (string): NHS Integrated Care Board (England). - `ruralUrban2021` (string): 2021 rural-urban classification label. - `introducedOn` (string): Month the postcode was introduced, YYYY-MM. - `terminatedOn` (string): Month the postcode was terminated, YYYY-MM; null for active postcodes. - `provider` (string): Data provider: Postcodes.io (ONS Postcode Directory). - `sourceUrl` (string): API endpoint the row was read from; null when no lookup was made. - `fetchedAt` (string): ISO 8601 time the data was fetched. ## Input settings - `postcodes` (array, required): Up to 1,000 UK postcodes, one per line, e.g. SW1A 2AA. Case and spaces don't matter (sw1a2aa works). Duplicates are looked up once; repeats cost only the small check fee. Northern Ireland postcodes (starting with BT) are returned as unsupported_licensed_region without a lookup. - `includeTerminated` (boolean): When a postcode is not active, check whether it is a terminated (retired) postcode and return its last known location and termination date. Turn off to report such postcodes simply as not_found. ## Step by step on Apify 1. Open the Input tab. 2. Keep the 5 example postcodes in Postcodes (`postcodes`) or paste your own, one per line. 3. Keep Check terminated postcodes (`includeTerminated`) on. 4. Click Start. 5. Open the Overview table in the Output tab and check `status`, `latitude` and `adminDistrict`. ## Use cases | Task | Input | Key fields | Next step | |---|---|---|---| | Map customers | `postcodes` from a CRM column | `latitude`, `longitude`, `status` | Map tool, BI dashboard | | Join to ONS statistics | `postcodes` | `lsoaCode`, `msoaCode`, `outputArea`, `adminDistrictCode` | ONS / Census tables | | Sales territories | `postcodes` | `region`, `adminDistrict`, `adminCounty`, `parliamentaryConstituency` | CRM fields | | Data cleaning | `postcodes` | `status`, `postcode` (normalized), `terminatedOn` | Fix or remove bad records | ## Tips - Do not worry about spaces or case. The tool cleans each postcode. - Filter by status to see not-found and old postcodes fast. - Coordinates are the postcode centre, not one house. ## Limits - Northern Ireland (BT): NI postcode data needs a commercial licence from Land & Property Services. These rows are marked `unsupported_licensed_region` before any lookup and cost only the check fee. - Freshness: data follows the ONS Postcode Directory loaded by Postcodes.io (ONSPD August 2026 when we checked on 2026-10-12). It is updated quarterly. Very new postcodes may be `not_found` until the next update. - Source problems: requests have a 20-second timeout and up to 3 tries. If the source stops answering, the rest of the rows are saved as `error` (not `not_found`) and are not charged. The summary says `PARTIAL` (some results) or `ERROR` (none, the run fails). ## Sample result ```json { "inputIndex": 0, "input": "SW1A 2AA", "postcode": "SW1A 2AA", "status": "found", "statusReason": "Active postcode", "errorCode": null, "duplicateOfIndex": null, "latitude": 51.503541, "longitude": -0.12767, "eastings": 530047, "northings": 179951, "positionalQuality": 1, "country": "England", "region": "London", "adminDistrict": "Westminster", "adminDistrictCode": "E09000033", "adminWard": "St James's", "adminWardCode": "E05013806", "parliamentaryConstituency": "Cities of London and Westminster", "parliamentaryConstituencyCode": "E14001172", "lsoa": "Westminster 018C", "lsoaCode": "E01004736", "msoa": "Westminster 018", "msoaCode": "E02000977", "introducedOn": "1980-01", "terminatedOn": null, "provider": "Postcodes.io (ONS Postcode Directory)", "fetchedAt": "2026-10-12T07:46:24.376Z" } ``` ## Use it from code Actor ID: `cliqtomedia/gb-postcode-lookup` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/gb-postcode-lookup").call(run_input={ "postcodes": [ "SW1A 2AA", "EH99 1SP", "CF99 1SN", "M60 2LA", "B1 1BB" ], "includeTerminated": True }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~gb-postcode-lookup/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"postcodes": ["SW1A 2AA", "EH99 1SP", "CF99 1SN", "M60 2LA", "B1 1BB"], "includeTerminated": true}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/gb-postcode-lookup") result = tool.invoke({"run_input": {"postcodes": ["SW1A 2AA", "EH99 1SP", "CF99 1SN", "M60 2LA", "B1 1BB"], "includeTerminated": True}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [EU TED Tenders Scraper & Monitor](https://cliqtomedia.com/actors/eu-ted-tenders-scraper/) - [UK Bank Holidays & Business Day Calculator](https://cliqtomedia.com/actors/uk-bank-holidays-business-days/) - [USAspending Federal Awards & Recipient Monitor](https://cliqtomedia.com/actors/usaspending-federal-awards-monitor/) - [VIN Decoder & Vehicle Recalls](https://cliqtomedia.com/actors/vin-decoder-vehicle-recalls/) - [FDA Recalls & Enforcement Monitor](https://cliqtomedia.com/actors/fda-recalls-enforcement-monitor/) - [NASA POWER Historical Weather & Solar Data](https://cliqtomedia.com/actors/nasa-power-climate-data/) --- # GBIF Biodiversity Occurrence Search > GBIF occurrence data search by species, country, area, year and license. Get up to 1,000 records with coordinates, taxonomy and attribution. URL: https://cliqtomedia.com/actors/gbif-occurrence-search/ Category: Science & research data · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Search species records from GBIF with a few filters. Get coordinates, taxonomy and the dataset that published each record. It is a quick way to explore a species. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `[]` in Record licenses. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Search biodiversity observations from GBIF by species, country, area, year and record license. Get up to 1,000 records with published coordinates, taxonomy, dataset titles and publisher attribution. No GBIF account or API key is needed. ## Price Prices will be shown after release. ## Questions ### Do I need a GBIF account? No. The tool uses public search endpoints. ### Does a species search include subspecies? Yes. A taxon includes its child taxa. ### Is this a full GBIF download? No. It is a limited live search of up to 1,000 records. ### Why are some points missing? Publishers may hide or blur sensitive places. ### Can I use every record commercially? No. The default allows CC BY-NC too. Use `commercialUseOnly:true` for CC0 and CC BY, and follow attribution and source terms. ### Why are coordinates missing or less precise? Publishers may omit or generalize sensitive locations. Check `coordinateUncertaintyInMeters`, `informationWithheld` and `dataGeneralizations`. ### Is this a full download or a live monitor? It is a limited live search. It has no download DOI, baseline or only-new mode. Dataset DOI and citation are included when available. ## Data fields - `gbifID` (string): Stable GBIF occurrence ID as text. - `provider` (string): Data provider: GBIF. - `sourceUrl` (string): GBIF occurrence API record URL. - `occurrenceUrl` (string): GBIF occurrence page URL. - `fetchedAt` (string): UTC time when this row was normalized. - `key` (number): Stable GBIF occurrence ID as a safe integer. - `scientificName` (string): Interpreted scientific name including authorship. - `rank` (string): Interpreted taxon rank. - `eventDate` (string): Observation date as supplied by GBIF; may include time or a date interval. - `country` (string): Country name of the observation. - `countryCode` (string): ISO alpha-2 country code. - `basisOfRecord` (string): Record type, for example HUMAN_OBSERVATION or PRESERVED_SPECIMEN. - `occurrenceStatus` (string): PRESENT or ABSENT if the source supplies it; neither is inferred. - `datasetKey` (string): UUID of the source dataset. - `datasetTitle` (string): Current title from the GBIF dataset registry. - `datasetUrl` (string): GBIF dataset page for attribution. - `datasetDoi` (string): Dataset DOI where available; not a DOI for this search. - `datasetCitation` (string): Citation provided by the dataset registry. - `publisher` (string): Publishing organization title from the GBIF registry. - `publishingOrgKey` (string): UUID of the publishing organization. - `license` (string): License URL of this record, which can differ from the dataset license. - `recordedBy` (string): Observer/collector exactly as published; no personal enrichment. - `sourceUpdatedAt` (string): GBIF lastInterpreted timestamp; not the date of the observation. - `informationWithheld` (string): Source notice about hidden sensitive information. - `dataGeneralizations` (string): Source notice about generalization of sensitive data. - `kingdom` (string): Interpreted kingdom name; null when missing. - `phylum` (string): Interpreted phylum name; null when missing. - `class` (string): Interpreted class name; null when missing. - `order` (string): Interpreted order name; null when missing. - `family` (string): Interpreted family name; null when missing. - `genus` (string): Interpreted genus name; null when missing. - `species` (string): Interpreted species name; null when missing. - `taxonKey` (number): GBIF backbone taxon key assigned to this record. - `decimalLatitude` (number): Published WGS84 latitude in degrees; null when unavailable. - `decimalLongitude` (number): Published WGS84 longitude in degrees; null when unavailable. - `coordinateUncertaintyInMeters` (number): Published horizontal uncertainty in metres; zero is preserved. - `year` (number): Observation year as an integer when supplied. - `issues` (array): GBIF quality/interpretation flags. - `latitude` (number): Same published WGS84 latitude as decimalLatitude; compatibility alias. - `longitude` (number): Same published WGS84 longitude as decimalLongitude; compatibility alias. ## Input settings - `taxonName` (string): Exact scientific name to resolve with GBIF species match. Do not set with taxonKey. Ambiguous names fail with candidates in the summary. - `taxonKey` (integer): Numeric GBIF backbone key. Includes child taxa. Use this to select an ambiguous name. - `country` (string): ISO alpha-2 country of the observation, such as KE. Combined with other filters using AND. - `bbox` (array): WGS84 [west, south, east, north]. Longitude first. Values must increase; boxes crossing the antimeridian are not supported. - `yearFrom` (integer): Inclusive observation year, 1–9999. If only yearTo is set, the lower bound is 1. - `yearTo` (integer): Inclusive observation year, 1–9999. If only yearFrom is set, the upper bound is 9999. - `hasCoordinate` (boolean): True returns records with both coordinates; false returns records without both. Omit to allow both. Bounding boxes cannot be combined with false. - `licenses` (array): Allowed record licenses, combined using OR. Use the codes CC0_1_0, CC_BY_4_0 or CC_BY_NC_4_0. Empty means all. commercialUseOnly further restricts this list to CC0 and CC BY. - `commercialUseOnly` (boolean): Restrict record licenses to CC0 and CC BY. Attribution still applies to CC BY. Conflicting licenses cause an input error. - `maxResults` (integer): Maximum unique occurrences saved, 1–1000. A result limit is not an export of every source match. - `offset` (integer): Source pagination offset, 0–99999. offset + maxResults must not exceed 100000. The live source may change between runs. ## Step by step on Apify 1. Open Input. 2. Keep the form example: `Panthera leo`, years 2020–2025, coordinates enabled, 50 records. 3. Set a maximum run cost in Apify if you want a money limit. 4. Click Start. 5. Open Dataset → Occurrences. Use Attribution to check the dataset, publisher and license. 6. Open Key-value store → RUN_SUMMARY to check the status and counts. ## Use cases | Task | Input | Fields to use | |---|---|---| | Explore species records | `taxonName` or `taxonKey` | `gbifID`, taxonomy, `eventDate` | | Prepare a map input | `country`, `bbox`, `hasCoordinate:true` | WGS84 coordinates and uncertainty | | Check reuse licenses | `commercialUseOnly` or `licenses` | `license`, `publisher`, dataset citation | ## Tips - Use an exact scientific name or a taxon key. - Turn on the commercial use setting to keep only CC0 and CC BY records. - Check the uncertainty column before you trust a point. ## Limits - Maximum 1000 records and 8 search pages per run. GBIF search allows an offset plus result limit up to 100000. - Each new dataset and publisher in the results needs metadata requests. A broad search whose records come from many dozens of datasets can reach the 100-request limit before 1000 records; the run then stops with `REQUEST_LIMIT` and keeps the records already saved. Narrow the taxon, area or years, or continue with `nextOffset`. - The source can change between pages or runs. An offset continuation is not a frozen snapshot. - At most 100 source requests including metadata and retries, 8 MiB per response, 24 MiB of downloaded responses, and 2 MiB of normalized output per run. - Source work stops after 120 seconds, or 15 seconds before the platform deadline, whichever comes first. A larger Apify timeout does not increase this source-work budget. - Requests are sequential, about one per second, with limited retries and `Retry-After` support. GBIF has no guaranteed search query rate. - Invalid metadata, schema changes, rate-limit exhaustion and source outages fail honestly. Records saved before a later error remain available. - Country and bounding box use published, interpreted locations. Null or generalized coordinates can limit map use. The Actor does not recover hidden coordinates. ## Sample result ```json { "gbifID": "5006926565", "scientificName": "Panthera leo melanochaita (C.E.H.Smith, 1858)", "taxonKey": 5219411, "rank": "SUBSPECIES", "decimalLatitude": -2.637562, "decimalLongitude": 34.715044, "coordinateUncertaintyInMeters": 31434, "eventDate": "2025-01-02T13:53:58", "country": "Tanzania, United Republic of", "countryCode": "TZ", "basisOfRecord": "HUMAN_OBSERVATION", "datasetTitle": "iNaturalist Research-grade Observations", "publisher": "iNaturalist.org", "license": "http://creativecommons.org/licenses/by-nc/4.0/legalcode", "informationWithheld": "Coordinate uncertainty increased to 31434m to protect threatened taxon", "occurrenceUrl": "https://www.gbif.org/occurrence/5006926565" } ``` ## Similar tools - [Google Patent Details Scraper](https://cliqtomedia.com/actors/google-patents-scraper/) - [DOI Metadata & Bibliography Enrichment](https://cliqtomedia.com/actors/doi-bibliography-enrichment/) - [ClinicalTrials.gov Studies Search & Monitor](https://cliqtomedia.com/actors/clinicaltrials-gov-studies-monitor/) - [DataCite Research Dataset Search](https://cliqtomedia.com/actors/datacite-dataset-search/) - [Europe PMC Literature Search & Monitor](https://cliqtomedia.com/actors/europe-pmc-literature-search/) - [Google Scholar Search Scraper - Citations & PDFs, No Login](https://cliqtomedia.com/actors/google-scholar-scraper/) --- # GitHub Releases Monitor and Scraper for Public Repos > GitHub releases monitor for public repos: release notes, dates and asset details as JSON or CSV. Compare a past snapshot to find new releases. URL: https://cliqtomedia.com/actors/github-releases-monitor-scraper/ Category: Developer & website monitoring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/github-releases-monitor-scraper?fpr=cliqto Add up to 10 public repositories and get their releases as rows. Each row has notes, dates and asset details. Give an old snapshot to see what is new or changed. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `cli/cli` in Public repositories. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Read published releases from known public GitHub repositories. Get release notes in Markdown, dates, stable release IDs and asset metadata. Compare your own previous snapshot to find new or changed releases. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.05 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Published release saved | $0.0027 | One published release row saved in the default Dataset. Includes notes and retained asset metadata. | - One release: about $0.05. - 1,000 releases: about $2.75. - Every day 100 releases, for 30 days: about $9.60 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/github-releases-monitor-scraper?fpr=cliqto ## Questions ### Do I need a GitHub token? No. It works without one. A token can help when the shared limit is used up. ### Can it read private repos? No. It reads only public repositories. ### Does it download release files? No. It saves file details and links, not the files. ### Are tags without a release included? No. Only published GitHub Releases are returned. ### Can I scrape private repositories with my token? No. The Actor first checks that the repository is anonymously accessible. A 404 cannot distinguish a missing repository from a private one. ### Does latest include prereleases or find the highest version? No. It uses GitHub's stable latest endpoint. List mode can include prereleases. The Actor does not sort semantic versions. ### Does an unchanged run return zero rows? Only if you pass a matching `previousSnapshot` and set `onlyChanges=true`. With the default `onlyChanges=false`, you still get current release rows with `change=unchanged`. ### Does a missing release mean it was removed? Only when both scans have a complete and comparable full list history. Bounded windows and latest mode do not prove deletion. The baseline must be your real previous snapshot. ### Do download counts trigger a changed release? No. Counts are returned as current metadata but excluded from the fingerprint. Notes, names, dates and retained asset metadata can trigger a change. ## Data fields - `id` (string) - `repository` (string) - `owner` (string) - `repositoryName` (string) - `repositoryUrl` (string) - `releaseId` (integer) - `tagName` (string) - `name` (string) - `body` (string) - `notesFormat` (string) - `createdAt` (string) - `publishedAt` (string) - `prerelease` (boolean) - `releaseUrl` (string) - `author` (object) - `assets` (array) - `notesTruncated` (boolean) - `assetsTruncated` (boolean) - `retrievedAt` (string) - `change` (string) ## Input settings - `repositories` (array, required): 1–10 public owner/name values or exact https://github.com/owner/name URLs. Duplicates share one scan. API input must supply this field. - `mode` (string): List a bounded source window, or use GitHub latest stable release. Latest does not mean highest semantic version. - `includePrereleases` (boolean): Keep prereleases in list mode. Latest always returns a stable release. - `maxReleasesPerRepository` (integer): Bound the source scan before filters. 1–500 raw releases per repository; includes skipped prereleases. - `maxResults` (integer): 1–1000 saved Dataset rows in this run. A filter or unchanged scan can still read the full source window. - `onlyChanges` (boolean): Requires previousSnapshot. Save only added/changed releases. Off returns the current releases each time. - `previousSnapshot` (object): Paste the full SNAPSHOT record from your previous run. Contract v1, matching mode/filter/window, up to 1000 fingerprint entries. No shared server state. - `githubToken` (string): Optional existing user token for public repositories. Stored encrypted by Apify; never added to results. Anonymous demo needs no token. Private repositories are blocked. - `maxRequests` (integer): 1–30 attempts total, including retries, redirects and public checks. No proxy rotation. - `requestTimeoutSecs` (integer): 5–30 seconds per request, also bounded by the scan deadline. - `deadlineSecs` (integer): 10–180 seconds for source work and retries. Leaves time to save summary before the Cloud timeout. ## Step by step on Apify 1. Open Input in Apify Console. 2. Keep the form example: `repositories` is `["cli/cli"]`, `mode` is `list`, and both release limits are `2`. 3. Leave `githubToken` empty and `onlyChanges` off. 4. Click Start. Use the default build and 256 MB memory. 5. Open the Dataset. Check `repository`, `releaseId`, `tagName` and `assets`. Open `RUN_SUMMARY` to check coverage. ## Use cases | Task | Input | Useful output | |---|---|---| | Watch dependencies | Your known repositories; list or latest | `tagName`, `publishedAt`, `body`, `releaseUrl` | | Check an asset catalogue | A CLI or desktop application's repo | Asset name, content type, size and download URL | | Build a release-note report | Small list windows across several repos | Markdown notes, stable IDs and dates | | Track release edits | Matching `previousSnapshot` | `change`, diff IDs and the current snapshot | ## Tips - Start without a token. Add one only if you hit the GitHub rate limit. - Use latest mode to get only the current stable release of each repo. - Keep each run's snapshot. Use it next time to see what changed. ## Limits - Up to 10 repository inputs, 500 raw releases per repository, 1,000 saved rows and 1,000 snapshot entries per run. A successful Cloud scan returned 1,000 real releases; smaller repositories can return fewer. - Hard process deadline of 300 seconds; sequential requests; up to 30 attempts, two retries per request, 8 MiB per response and 32 MiB response bodies per run. No IP or proxy rotation to bypass GitHub quota. - Anonymous GitHub REST requests are limited to 60 per hour per IP. Shared Cloud egress can use this quota before your run. Existing authenticated tokens often have higher limits, but secondary limits still apply. See GitHub rate limits. - Source order is kept. No promise of all history, highest semantic version, every asset beyond the returned API array, or a consistent database snapshot while GitHub changes between pages. - No private repositories, drafts, bare tags, issues, commit scraping, binary downloads, source mutations or repository search. - A `partial` scan keeps useful saved rows. Reasons include `repository_limit`, `result_limit`, `snapshot_limit`, `request_limit`, `byte_limit`, `deadline`, `cancelled` and `charge_limit`. Check each repository outcome. - No proxy is used. Rate-limit headers and `Retry-After` are respected. If the reset is outside the deadline, the run reports the rate limit instead of waiting for an hour. ## Sample result ```json { "id": "cli/cli:399674740", "repository": "cli/cli", "owner": "cli", "repositoryName": "cli", "repositoryUrl": "https://github.com/cli/cli", "releaseId": 399674740, "tagName": "v2.102.0", "name": "GitHub CLI 2.102.0", "body": "## Security\n\nFour security vulnerabilities have been identified, and fixed, in this release. Users are advised to update gh to version `v2.102.0` as soon as possible.\n\n`gh release download`, `gh run download`, `gh repo read-file --output`, and `gh attestation download` could write remote content to an unintended local file when the destination contained symbolic links.\n\nSee https://github.com/cli/cli/security/advisories/GHSA-39wj-f2f4-978v for mo", "notesFormat": "markdown", "createdAt": "2026-09-30T02:18:02Z", "publishedAt": "2026-09-30T02:40:02Z", "prerelease": false, "releaseUrl": "https://github.com/cli/cli/releases/tag/v2.102.0", "author": { "login": "github-actions[bot]", "url": "https://github.com/apps/github-actions" }, "assets": [ { "id": 599854636, "name": "gh_2.102.0_checksums.txt", "contentType": "text/plain; charset=utf-8", "size": 1971, "downloadCount": 54188, "downloadUrl": "https://github.com/cli/cli/releases/download/v2.102.0/gh_2.102.0_checksums.txt" } ], "notesTruncated": false, "assetsTruncated": false, "retrievedAt": "2026-10-07T01:30:15.660Z", "change": "initial" } ``` ## Use it from code Actor ID: `cliqtomedia/github-releases-monitor-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/github-releases-monitor-scraper").call(run_input={ "repositories": [ "cli/cli" ], "mode": "list" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~github-releases-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"repositories": ["cli/cli"], "mode": "list"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/github-releases-monitor-scraper") result = tool.invoke({"run_input": {"repositories": ["cli/cli"], "mode": "list"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/): See what your competitors launch, hire, change and advertise. Every week, without opening their sites. ## Similar tools - [RSS & Atom Feed Reader / Monitor](https://cliqtomedia.com/actors/rss-atom-feed-reader-monitor/) - [Link Route Audit — Bulk HTTP Status & Redirects](https://cliqtomedia.com/actors/bulk-url-status-redirect-checker/) - [Software End-of-Life Checker](https://cliqtomedia.com/actors/software-end-of-life-checker/) - [Dependency Vulnerability Scanner (OSV)](https://cliqtomedia.com/actors/osv-dependency-vulnerability-scanner/) - [GitHub Repositories & Users Search (No Login)](https://cliqtomedia.com/actors/github-search/) - [OpenAPI Catalog & Breaking Change Detector](https://cliqtomedia.com/actors/openapi-spec-catalog-diff/) --- # GitHub Repositories & Users Search > GitHub search scraper: find repositories or users with GitHub search syntax. Get stars, forks, language, topics and licence. No login, no emails. URL: https://cliqtomedia.com/actors/github-search/ Category: Developer & website monitoring · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Search GitHub with its own search syntax. Get one row per repository or per user. You need no GitHub account or token. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `repositories` in What to search. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Search GitHub repositories or GitHub users with GitHub's own search syntax and get clean rows: stars, forks, language, topics, licence and last push for repositories, or name, company, location, followers and public repos for users. No login and no token needed. - Repositories mode: one row per repository with `fullName`, `url`, `description`, `stars`, `forks`, `language`, `topics`, `license`, `pushedAt` and more. - Users mode: one row per user or organisation with `login`, `url`, `name`, `company`, `location`, `followers`, `publicRepos` and more. Profile details come from the public GitHub profile. ### Good for - Find the most-starred repositories for a topic or language, for example `web scraper language:python` sorted by `stars`. - Track tools in your niche: repositories with a topic, licence or recent activity (`pushed:>2026-01-01`). - Build a list of public developer profiles by location and language, for example `location:berlin language:rust`, sorted by followers. ### Not a good fit - No code search, issues, pull requests, commits or README text. Only repositories and users. - No emails and no private data. Only public fields that GitHub shows to anyone. - GitHub returns at most 1,000 results per query. To get more, split the query, for example by `created:` date ranges or by `language:`. - Without a token, GitHub gives about 60 full profile lookups per hour to the shared Apify IP. Bigger users runs still finish, but some profiles are partial or unavailable (see Limits). ## Price Prices will be shown after release. ## Questions ### Do I need a GitHub account or token? No. It works without a login. A token only gives you your own GitHub quota. ### Does it return email addresses? No. It never reads the email field. It also removes emails from bio, blog and company text. ### Can I search code, issues or pull requests? No. It searches repositories and users only. ### How many results can I get? GitHub returns up to 1,000 results for one query. Split the query by date or language to get more. ### How fresh is the data? Each row is read from GitHub at run time; `fetchedAt` shows when. Star and follower counts change all the time. ### Is the result complete? You get what GitHub search returns for your query, up to 1,000 results. GitHub can report `incomplete_results` when its search times out; the summary then shows a warning. ### Can I use the data for outreach? Use profile data only within GitHub's Acceptable Use Policies and your local privacy law. Do not use it for spam or resell personal information. ## Data fields - `type` (string): Row type: repository or user. - `query` (string): The search query that returned this row. - `rank` (integer): Position in GitHub's result order for this query and sort (1 = first). - `id` (integer): GitHub numeric ID of the repository or account. - `fullName` (string): Repository owner/name, e.g. apify/crawlee. - `name` (string): Repository name (repositories) or display name from the profile (users); null if not set. - `owner` (string): Login of the repository owner. - `ownerType` (string): Owner account type: User or Organization. - `url` (string): Public github.com page of the repository or account. - `description` (string): Repository description; null if empty. - `homepage` (string): Repository homepage URL set by the owner; null if empty. - `stars` (integer): Stargazer count. 0 means none; null means GitHub did not return it. - `forks` (integer): Fork count. - `openIssues` (integer): Open issues plus open pull requests, as GitHub counts them. - `watchers` (integer): Watchers as reported by the search API (equals stars on GitHub). - `language` (string): Primary language detected by GitHub; null if none. - `topics` (array): Repository topics; empty list if none. - `license` (string): SPDX licence ID such as MIT or Apache-2.0; null when no licence or GitHub could not classify it. - `licenseName` (string): Licence name as GitHub shows it, including "Other". - `isFork` (boolean): true if the repository is a fork. - `isArchived` (boolean): true if the repository is archived (read-only). - `isTemplate` (boolean): true if the repository is a template. - `defaultBranch` (string): Default branch name. - `sizeKb` (integer): Repository size in KB as reported by GitHub. - `createdAt` (string): When the repository or account was created (ISO 8601). Users: null when details came from web search. - `updatedAt` (string): Last metadata update (ISO 8601). - `pushedAt` (string): Last push to any branch (ISO 8601) — the best signal of recent activity. - `login` (string): Account login (users). - `accountType` (string): User or Organization. - `avatarUrl` (string): Avatar image URL. - `company` (string): Company field from the public profile, free text such as "@github". null when not set or when details came from web search. - `location` (string): Location field from the public profile, free text. - `bio` (string): Profile bio; email addresses are replaced with [email removed]. - `blog` (string): Website link from the profile; null when empty or an email address. - `twitterUsername` (string): X/Twitter username from the profile. - `followers` (integer): Follower count. - `following` (integer): Number of accounts followed (API details only). - `publicRepos` (integer): Public repository count. - `publicGists` (integer): Public gist count (API details only). - `hireable` (boolean): true if the user marked themselves available for hire; null if not set. ## Input settings - `mode` (string): Search repositories or user/organisation accounts. - `query` (string, required): Same syntax as the GitHub search box. Repositories: apify actor, language:python stars:>1000, topic:scraper pushed:>2026-01-01, org:apify. Users: location:berlin language:rust, followers:>500 type:user, type:org location:paris. Max 256 characters. - `sort` (string): best-match is GitHub's default relevance order. Repositories: stars, forks, updated, help-wanted-issues. Users: followers, repositories, joined. A sort that does not fit the mode is rejected. - `order` (string): Direction for the chosen sort. Ignored for best match. - `maxItems` (integer): How many results to save, 1–1,000. GitHub serves at most the first 1,000 matches of any query; split a larger search into narrower queries (for example by created: or stars: ranges). - `includeUserDetails` (boolean): Users mode: add name, company, location, bio, followers and public repo counts to each user. Without a token, GitHub allows 60 profile lookups per hour per IP; after that the Actor uses github.com user search, which fills name, location, bio, followers and repo counts but not company (detailsStatus "partial"). Turn off for the fastest login-only list. - `githubToken` (string): Optional personal access token with no scopes (read-only public data). Raises GitHub limits to 30 searches per minute and 5,000 profile lookups per hour, so every user gets full details. Stored encrypted, never logged or saved to output. ## Step by step on Apify 1. Open the Input tab. 2. Keep What to search (`mode`) as `repositories`. 3. Keep the prefilled Search query (`query`) `apify actor`, or type your own query. 4. Keep Max results (`maxItems`) at the prefilled `10`. 5. Click Start. 6. Open the Repositories view of the Dataset. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Find popular projects for a topic | `mode=repositories`, `query`, `sort=stars` | Repository | `fullName`, `stars`, `language`, `topics` | Export to CSV or Google Sheets | | Watch recent activity in a niche | `query` with `pushed:>YYYY-MM-DD`, `sort=updated` | Repository | `fullName`, `pushedAt`, `isArchived` | Schedule the run and compare Datasets | | Build a list of public developer profiles | `mode=users`, `query` with `location:` and `language:`, `sort=followers` | User | `login`, `name`, `location`, `company`, `followers` | Your CRM or spreadsheet | ## Tips - Add a date like pushed:>2026-01-01 to find active repositories. - GitHub gives up to 1,000 results per query. Split big topics by language or date. - Add your own token if you search many users. It gives you your own quota. ## Limits - A failed run (for example a broken query) costs only the start. - Every saved user row is charged once, whatever its `detailsStatus`. - Set Maximum cost per run in the run options to cap the cost. The Actor stops when the next row would go over it and saves what fits. - The default run timeout is 300 seconds. The Actor stops searching and saving at about 240 seconds so that the run ends cleanly. - `maxItems` is 1–1000. Users mode was tested up to 500 rows in one run without a token. - GitHub sometimes asks the shared Apify IP to slow down (a "secondary rate limit"). The Actor then waits about a minute and continues. Your cost does not change: you pay per saved row, not per second. - Without a token, GitHub allows about 10 searches per minute (100 results each) and about 60 full profile lookups per hour for the shared IP. GitHub documents higher limits for requests made with a token. ## Sample result ```json { "type": "repository", "query": "apify actor", "rank": 5, "id": 117851913, "fullName": "apify/apify-cli", "name": "apify-cli", "owner": "apify", "ownerType": "Organization", "url": "https://github.com/apify/apify-cli", "description": "Apify command-line interface helps you create, develop, build and run Apify Actors, and manage the Apify cloud platform.", "homepage": "https://docs.apify.com/cli", "stars": 259, "forks": 69, "openIssues": 176, "watchers": 259, "language": "TypeScript", "topics": ["apify", "command-line", "hacktoberfest", "headless-chrome", "puppeteer", "serveless"], "license": "Apache-2.0", "licenseName": "Apache License 2.0", "isFork": false, "isArchived": false, "isTemplate": false, "defaultBranch": "master", "sizeKb": 20339, "createdAt": "2018-01-17T15:05:58Z", "updatedAt": "2026-10-14T22:40:34Z", "pushedAt": "2026-10-16T20:23:39Z", "source": "GitHub REST API (api.github.com)", "fetchedAt": "2026-10-17T11:42:29.711Z" } ``` ## Similar tools - [GitHub Releases Monitor & Scraper](https://cliqtomedia.com/actors/github-releases-monitor-scraper/) - [Link Route Audit — Bulk HTTP Status & Redirects](https://cliqtomedia.com/actors/bulk-url-status-redirect-checker/) - [Software End-of-Life Checker](https://cliqtomedia.com/actors/software-end-of-life-checker/) - [Dependency Vulnerability Scanner (OSV)](https://cliqtomedia.com/actors/osv-dependency-vulnerability-scanner/) - [OpenAPI Catalog & Breaking Change Detector](https://cliqtomedia.com/actors/openapi-spec-catalog-diff/) - [SSL Certificate Checker: Expiry, Chain & CT, No Login](https://cliqtomedia.com/actors/ssl-certificate-inspector/) --- # GoHire Jobs Monitor and Scraper > GoHire jobs scraper for known companies: full job descriptions, locations, salary as shown and job links. Compare snapshots to see new and removed jobs. URL: https://cliqtomedia.com/actors/gohire-jobs-monitor-scraper/ Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/gohire-jobs-monitor-scraper?fpr=cliqto Add up to 4 GoHire companies and get their public jobs with full descriptions. Compare with a past run to see new, updated and removed jobs. No GoHire login needed. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `dexerto-de5jlhjo` in Known GoHire companies. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Read public GoHire jobs from companies you already know. Get job descriptions, locations, salaries as shown by the source, and job links. Compare full board snapshots to find new, updated and removed jobs. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.042 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Current job saved | $0.0004 | One unique matching current job saved to the default Dataset. Snapshots and changes are included. | - One job: about $0.04. - 1,000 jobs: about $0.44. - Every day 100 jobs, for 30 days: about $2.46 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/gohire-jobs-monitor-scraper?fpr=cliqto ## Questions ### Do I need a GoHire account? No. It reads public job boards without a login or key. ### Does a title filter change the snapshot? No. The filter changes the dataset only. The snapshot keeps the full list. ### Can it find companies by name? No. You give the company boards you already know. ### Does no output mean no cost? No. Each run has a start fee, even with no jobs. ### Does an unchanged monitor return no rows? No. It returns current matching jobs with `change: "unchanged"`. The comparison record contains no changes. Saved current rows still have their row charge. ### Is this a drop-in copy of a multi-ATS jobs API? No. It provides a small set of source-backed GoHire fields. It does not provide inferred or enriched multi-ATS fields. Map your consumer to the fields listed above. ## Input settings - `companies` (array, required): Add 1–4 hosted HTTPS board URLs, board slugs or public 8-character client hashes. Duplicate hashes are read once. No company discovery. - `maxResults` (integer): Save up to 37 matching jobs. The full source scan still runs. A lower cap gives partial output if matching jobs remain. - `titleIncludes` (array): Optional 1–80 character phrases. Case-insensitive substring OR. Filters apply after the full scan. Omit for all titles. - `previousSnapshotRunId` (string): Optional 17-character run ID from this Actor and your account. Reads its SNAPSHOT. Compare only boards complete in both runs. First run creates a baseline. ## Step by step on Apify 1. Open Input. 2. Put `dexerto-de5jlhjo` in Known GoHire companies (`companies`). 3. Keep `maxResults` at 37. Leave the title filter and previous run ID empty. 4. Click Start with 256 MB and a 210-second timeout. 5. Open Dataset. Check `jobId`, `title`, `companyName`, `description` and `url`. 6. Open Key-value store → `RUN_SUMMARY`. Check `status` and the per-company `complete` flag. ## Use cases | Task | Input | Result to use | |---|---|---| | Add known employers to a job board | `companies` | `jobKey`, `title`, `description`, `url` | | Watch technical roles | `titleIncludes: ["engineer"]` | Matching current rows; keep the unfiltered snapshot | | Track new or changed roles | `previousSnapshotRunId` | `CHANGES` with stable job keys and changed fields | | Remove closed roles from your own list | Compare complete snapshots | `removed` records in `CHANGES`; do not treat skipped boards as removed | ## Tips - Use the board name from the jobs.gohire.io address. - Add a past run ID to compare. The first run makes the baseline. - Keep the old run's storage. Deleted runs cannot be compared. ## Limits - Only public hosted GoHire boards are supported. Custom domains, candidate data and registration are outside this Actor's scope. - Provide known board URLs, slugs or client hashes. There is no company discovery or global keyword search. - Details may be missing or change during a scan. The source is not frozen at one instant. Fetch time is not the employer's update time. - Descriptions are limited to 60,000 HTML characters. A cut description is partial. Scripts, styles and unsafe HTML are removed. - A title filter does not save requests. `maxResults` limits saved jobs, not the full scan. - Only complete boards on both sides produce differences. A new board not present in the prior snapshot is `not_compared`; rerun it without a prior ID to make a baseline. - A hard abort can stop before the terminal KVS records are written. Check run status and saved rows before you use a snapshot. - No inferred remote status, coordinates, skills, contact details, normalized salary or applicant information is added. ## Sample result ```json { "rowType":"job", "ats":"gohire", "jobId":"303056", "jobKey":"gohire:de5jlhjo:303056", "clientHash":"de5jlhjo", "companySlug":"dexerto-de5jlhjo", "companyName":"Dexerto", "title":"Publisher Success Manager (US)", "location":"United States", "city":null, "region":null, "country":"United States", "countryCode":"US", "employmentType":"Full-time", "salary":"1 - 999999 USD Per annum", "datePosted":"02 October, 2026", "description":"Born from deep roots in gaming media, Omnidex (Part of Dexerto Media Group) was created to give advertisers access to a trusted network of premium publishers...", "descriptionHtml":"

Born from deep roots in gaming media...

", "url":"https://jobs.gohire.io/dexerto-de5jlhjo/publisher-success-manager-us-303056/", "applyUrl":"https://jobs.gohire.io/dexerto-de5jlhjo/publisher-success-manager-us-303056/", "boardUrl":"https://jobs.gohire.io/dexerto-de5jlhjo/", "fetchedAt":"2026-10-04T14:44:33.828Z", "status":"complete", "contentHash":"SHA256 value", "change":"baseline", "changedFields":[] } ``` ## Use it from code Actor ID: `cliqtomedia/gohire-jobs-monitor-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/gohire-jobs-monitor-scraper").call(run_input={ "companies": [ "dexerto-de5jlhjo" ], "maxResults": 37 }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~gohire-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"companies": ["dexerto-de5jlhjo"], "maxResults": 37}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/gohire-jobs-monitor-scraper") result = tool.invoke({"run_input": {"companies": ["dexerto-de5jlhjo"], "maxResults": 37}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) --- # Google Ads Transparency Center Scraper > Google Ads Transparency Center scraper: see competitor ad text, images, YouTube ads, dates and countries. Search by domain or advertiser. No login. URL: https://cliqtomedia.com/actors/google-ads-transparency-scraper/ Category: Search, SEO & ads · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/google-ads-transparency-scraper?fpr=cliqto See which ads a brand runs on Google. Add a domain or advertiser name and get one row per ad. You get the ad text, dates and countries. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `apify.com` in Domains. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Google Ads Transparency Scraper gets the ads that a brand or website runs on Google. Add a domain, an advertiser name or an advertiser ID (AR…), and the Actor returns one row per ad from the public [Google Ads Transparency Center](https://adstransparency.google.com/): ad text, image or YouTube link, first and last shown dates, countries and impression ranges. - Who: advertiser name, advertiser ID (AR…), domain. - What: format (`text`, `image`, `video`), headline, description, display URL, call-to-action, image URL, YouTube link. - When: first shown, last shown, days shown, as reported by Google. - Where and how much: countries where the ad ran, with dates and impression ranges per country, plus a total impression range. - Links: the public Transparency Center page of the ad and the Google preview URL. ### Good for - See which ads a competitor runs on Google right now, and when Google first showed them. - Collect ad copy (headlines and descriptions) of a brand for PPC research. - Check in which countries a brand advertises and how big the reach is. - Save image ads and YouTube ads of a brand for creative research. ### Not a good fit - The Actor shows what Google publishes in the Transparency Center. It does not show clicks, spend, keywords or targeting. - Impressions are ranges from Google (for example 1,000–2,000), not exact numbers. Google does not show them for every ad. - Some text ads exist only as a picture. For them `headline` and `description` are `null`, and `imageUrl` has the picture. - Up to 500 ads per advertiser or domain, and about 600–800 ads per run in total. For more, split the job across several runs. - The Actor does not solve CAPTCHAs. If Google blocks all requests, the run stops with a clear error. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.004 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Ad | $0.0012 (from $0.001 on paid Apify plans) | Charged for each ad row saved to the dataset (complete or partial), with ad text, image/YouTube link, dates and per-country reach included. Not-found and error rows are free. | - One ad: about $0.0052. - 1,000 ads: about $1.40 (50 runs of up to 20). - Every day 100 ads, for 30 days: about $4.20 a month (5 runs a day). - 20 ads once a week (4 runs a month): about $0.11 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/google-ads-transparency-scraper?fpr=cliqto ## Questions ### Can I see how much a competitor spends? No. Google does not publish spend, clicks, keywords or targeting. You get impression ranges where Google shows them. ### Why is the text empty for some ads? Google stores some text ads only as a picture. Then you get the image link instead. ### How many brands can I check at once? Up to 20 domains and advertisers per run, with up to 500 ads each. ### Do I need a Google Ads account? No. The tool reads the public Transparency Center without login or an API key. ### Do I need a Google account or an API key? No. The Actor reads the public Ads Transparency Center pages. No login, cookies or API key. ### Are impressions exact? No. Google shows ranges, for example 1,000–2,000. The Actor returns the lower and upper end. Google does not show impressions for every ad or country; then the values are `null`. ### How fresh is the data? Every run reads the Transparency Center live. `lastShown` tells you when Google last showed the ad. ### Which name match does the Actor use? For a name, it looks for an advertiser whose name has the same whole words (exact name first). It never guesses a different company. For an exact account, use the AR… ID from the advertiser page URL. ## Data fields - `status` (string): Row result: complete, partial (some details missing), not_found (no ads for this input) or error. Only complete and partial rows are charged. - `statusReason` (string): Plain-English reason for partial, not_found or error rows; null when complete. - `errorCode` (string): Machine code for error rows, e.g. SOURCE_BLOCKED, RATE_LIMITED, DEADLINE_REACHED; null otherwise. - `input` (string): Your input value as given (advertiser name, AR… ID or domain). - `inputType` (string): How the input was read: advertiserId, advertiserName or domain. - `advertiserId` (string): Google advertiser ID (AR…). - `advertiserName` (string): Verified advertiser name as shown in the Ads Transparency Center. - `advertiserCountry` (string): Advertiser country (two-letter code) when Google shows it. - `domain` (string): Domain the ad points to, when Google shows it. - `creativeId` (string): Google creative (ad) ID (CR…). - `format` (string): Ad format: text, image or video. - `firstShown` (string): When the ad was first shown (ISO timestamp, from Google). - `lastShown` (string): When the ad was last shown (ISO timestamp, from Google). - `daysShown` (integer): Days shown, as reported by Google. - `regions` (array): Countries where the ad ran: code, name, criteriaId, firstShown, lastShown, impressionsMin, impressionsMax. null when details are off or unavailable. - `impressionsMin` (integer): Lower bound of total impressions Google reports (range, not an exact count). - `impressionsMax` (integer): Upper bound of total impressions Google reports. - `variations` (integer): Number of ad variations Google shows for this creative. - `headline` (string): Text ad headline from the Google ad preview. - `description` (string): Text ad description from the Google ad preview. - `displayUrl` (string): Display URL shown in the text ad. - `callToAction` (string): Call-to-action button text of display ads (e.g. Sign Up), when Google shows it. - `text` (string): Headline and description joined into one string; null when Google has no text for the ad (for example text ads shown only as an image). - `imageUrl` (string): Image URL of the ad: image ads, display ads (main image) and text ads Google renders as an image. - `videoUrl` (string): YouTube link of a video ad. - `creativeUrl` (string): Google preview URL of the creative. - `adUrl` (string): Public Ads Transparency Center page of this ad. - `regionFilter` (string): Region filter used for this row: anywhere or a country code. - `sourceUrl` (string): Ads Transparency Center page for your input. - `fetchedAt` (string): When the Actor read this row (ISO timestamp). ## Input settings - `domains` (array): Website domains whose ads you want, e.g. apify.com. Returns ads of every advertiser that points to the domain. URLs and www. are cleaned up automatically. Up to 20 domains and advertisers in total. - `advertisers` (array): Advertiser names (e.g. Apify Technologies) or advertiser IDs starting with AR (from the advertiser page URL, which you can also paste). A name must match whole words of a Transparency Center advertiser; if nothing matches, you get a free not_found row with the closest names and their AR… IDs. Use the AR… ID to pick an exact account. - `region` (string): Where the ads were shown: "anywhere" (default) or a two-letter country code such as US, GB, DE. - `format` (string): Only text, image or video ads. "all" keeps every format. - `dateFrom` (string): Only ads shown on or after this date (YYYY-MM-DD). Leave empty for no start limit. - `dateTo` (string): Only ads shown on or before this date (YYYY-MM-DD). Leave empty for today. - `maxAds` (integer): Maximum ads returned for each advertiser or domain, 1–500. One run collects about 600–800 ads in total within its ~4.5-minute working time; split bigger jobs across runs. Each ad row is charged; not-found and error rows are free. - `includeDetails` (boolean): Adds the countries where each ad ran, with first/last shown dates and impression ranges per country. Included in the price; turn off only for faster runs. - `includeAdText` (boolean): Reads the headline, description and display URL of text ads and the YouTube link of video ads from the Google ad preview. Included in the price; turn off only for faster runs. - `proxyConfiguration` (object): Apify datacenter proxy by default. If Google blocks it, the Actor switches to Apify residential proxy by itself. Choose your own proxy group or URLs to turn this off. The Actor never solves CAPTCHAs. ## Step by step on Apify 1. Open the Input tab. 2. Keep the prefilled domain `apify.com` in Domains, or add your own domain, for example `shopify.com`. 3. Keep Max ads per advertiser or domain at `20` and Region at `anywhere`. 4. Click Start. 5. Open the Output tab. The Ads view shows advertiser, format, dates, impressions and ad text. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Competitor ad monitoring | `domains` | one row per ad | `headline`, `firstShown`, `lastShown`, `daysShown` | schedule + Google Sheets | | PPC copy research | `domains` or `advertisers`, `format` = `text` | text ad | `headline`, `description`, `displayUrl` | export CSV | | Market and country check | `advertisers` + `region` | ad with regions | `regions`, `impressionsMin`, `impressionsMax` | BI tool via API | | Creative library | `format` = `image` or `video` | image or video ad | `imageUrl`, `videoUrl`, `callToAction` | download images | ## Tips - Use a domain when you do not know the exact advertiser name. - Filter by format to get only text, image or video ads. - Split big jobs into several runs; one run collects about 600 to 800 ads. ## Limits - Up to 20 domains and advertisers per run, up to 500 ads for each. - One run works for about 4.5 minutes and collects about 600–800 ads in total in our tests. If it has more to do, it stops with the ads it has and the summary shows `CAPPED` with `DEADLINE`. Split big jobs into several runs. - A larger run timeout does not make one run collect more. - A row with `status` `partial` is still charged: the ad is there, but some details (for example text or countries) could not be read. `statusReason` says what is missing. - Inputs that were not done when the run stopped get free `error` rows. ## Sample result ```json { "status": "complete", "statusReason": null, "errorCode": null, "input": "apify.com", "inputType": "domain", "advertiserId": "AR04545223091738902529", "advertiserName": "Apify Technologies s.r.o.", "advertiserCountry": null, "domain": "apify.com", "creativeId": "CR12249652250414153729", "format": "text", "firstShown": "2026-07-02T13:54:49.000Z", "lastShown": "2026-10-14T10:26:38.000Z", "daysShown": 105, "regions": [ { "code": "IE", "name": "Ireland", "criteriaId": 2372, "firstShown": "2026-07-03", "lastShown": "2026-10-13", "impressionsMin": 0, "impressionsMax": 1000 }, { "code": "IL", "name": "Israel", "criteriaId": 2376, "firstShown": null, "lastShown": "2026-10-14", "impressionsMin": null, "impressionsMax": null } ], "impressionsMin": 1000, "impressionsMax": 2000, "variations": 1, "headline": "Apify for your AI - Largest marketplace for AI", "description": "Connect Claude, ChatGPT, or Cursor to Apify Store via MCP and put tools to work today.", "displayUrl": "www.apify.com/", "callToAction": null, "text": "Apify for your AI - Largest marketplace for AI — Connect Claude, ChatGPT, or Cursor to Apify Store via MCP and put tools to work today.", "imageUrl": null, "videoUrl": null, "adUrl": "https://adstransparency.google.com/advertiser/AR04545223091738902529/creative/CR12249652250414153729?region=anywhere", "regionFilter": "anywhere", "sourceUrl": "https://adstransparency.google.com/?region=anywhere&domain=apify.com", "fetchedAt": "2026-10-14T11:15:51.596Z" } ``` ## Use it from code Actor ID: `cliqtomedia/google-ads-transparency-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/google-ads-transparency-scraper").call(run_input={ "domains": [ "apify.com" ], "region": "anywhere" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-ads-transparency-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"domains": ["apify.com"], "region": "anywhere"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/google-ads-transparency-scraper") result = tool.invoke({"run_input": {"domains": ["apify.com"], "region": "anywhere"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/): See what your competitors launch, hire, change and advertise. Every week, without opening their sites. ## Similar tools - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) - [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/) - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) - [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/) - [Google Images Scraper - Image URLs, Sizes & Source Pages](https://cliqtomedia.com/actors/google-images-scraper/) - [Google News Scraper - Real Article URLs, No Login](https://cliqtomedia.com/actors/google-news-scraper/) --- # Google Autocomplete Keyword Scraper > Google Autocomplete scraper: get live suggestions for your seed keywords by language and country. Add question prefixes. Only $0.05 per 1,000 rows. URL: https://cliqtomedia.com/actors/google-autocomplete-scraper/ Category: Search, SEO & ads · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/google-autocomplete-scraper?fpr=cliqto Get the phrases Google suggests when people start typing. Add seed keywords, pick a language and country, and export the list. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `coffee` in Seed keywords. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Collect live Google Autocomplete suggestions for your seed keywords. Choose a language and country preference. Each saved row shows the suggestion, the Google query that returned it and its position in that response. ### Good for - Find phrases to review when you plan an article or product page. - Compare suggestion lists for the same seed with different language and country preferences. - Export suggestions with their seed and query for your own search interface research. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Saved suggestion | $0.00005 | One unique useful Google Autocomplete suggestion saved to the default Dataset. | | Start fee | $0.001 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | - One suggestion: about $0.001. - 1,000 suggestions: about $0.05. - Every day 100 suggestions, for 30 days: about $0.18 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/google-autocomplete-scraper?fpr=cliqto ## Questions ### Does it show search volume? No. You get suggestions and their position in the list. Search volume, CPC and competition are not included. ### Does it work for non-English keywords? Yes. Cyrillic, accented and other Unicode text is kept. Google may still answer in another language. ### Are country results the same as a local user sees? Not exactly. The country setting is sent to Google, but the IP location does not change. ### Do I need a Google API key? No. You only need an Apify account to start the tool. ### Are these search volumes or Google Search rankings? No. `googleRank` is a position inside an Autocomplete response. Metadata does not provide verified search volume, CPC or competition. ### Are country results exact local results? No. `country` sends `gl`; it does not change IP location. Results can also depend on Google's current behavior. ### Will a repeat run have the same IDs and order? The same saved text and first query/context have the same synthetic ID. Query-plan grouping is deterministic. Google's suggestion text and order can change, and a different first expansion path can change an ID. ### Why did a low row limit still make several requests? The Actor fetches its bounded query plan before saving rows. Lower `maxGeneratedQueries` when you also need fewer source requests. ### Can it monitor changes or expand recursively? It can export repeated snapshots, but it has no built-in delta state, unchanged-result filter or recursive expansion. Compare exported snapshots in your own workflow. ## Data fields - `id` (string) - `suggestion` (string) - `normalizedSuggestion` (string) - `seed` (string) - `normalizedSeed` (string) - `generatedQuery` (string) - `expansionMode` (string) - `expansionToken` (string) - `language` (string) - `country` (string) - `client` (string) - `surface` (string) - `googleRank` (integer) - `sourceUrl` (string) - `sourceRequestId` (string) - `fetchedAt` (string) - `metadata` (object) - `duplicateOf` (string) ## Input settings - `keywords` (array, required): Add 1-100 seed keywords, each up to 120 characters. Spaces are trimmed and repeated spaces are joined. Unicode is kept. Duplicate seeds do not create duplicate saved rows. - `language` (string): Language preference sent as Google hl, such as en, fr, ru or pt-br. This is a preference, not a guarantee that every suggestion uses that language. - `country` (string): Two-letter country preference sent as Google gl, such as us, gb, fr or ru. This does not set the request IP location. - `client` (string): Choose chrome or firefox. They can return different suggestions and metadata. No browser is launched. - `expansionModes` (array): Choose one or more modes. exact sends the seed. alphabet adds a-z; numbers adds 0-9; questions adds your prefixes before the seed. Results are not expanded again. - `questionPrefixes` (array): Used for questions mode. Add 1-20 prefixes of up to 40 characters. Combined queries over 150 characters are skipped and reported. - `maxGeneratedQueries` (integer): Maximum planned Google queries, 1-500. Retries are counted separately. A small result limit does not reduce the query plan. - `maxResults` (integer): Maximum saved unique suggestions, 1-5000. Runtime default is 500; the new form prefill is 100. No result count is guaranteed. - `maxConcurrency` (integer): Maximum simultaneous Google requests, 1-8. Lower it if requests fail. Saved rows keep query plan order. - `requestTimeoutMillis` (integer): Timeout for one Google request in milliseconds. - `maxRetries` (integer): Retries for transient network or server errors. Blocks and bad requests are not retried. - `maxResponseBytes` (integer): Stops parsing if one Google response is larger than this byte limit. - `maxRunTimeSeconds` (integer): Internal source-work limit, 5-300 seconds. Default is 240. A shorter platform timeout also limits source work and reserves time to save results. - `includeRawMetadata` (boolean): Keep metadata returned by Google for each suggestion. Missing metadata is an empty object. Values are undocumented and are not search volume. - `maxChargeUsd` (number): Optional estimated suggestion-event cap in USD. It limits saved rows, not source requests or total platform usage. Also set a maximum cost per run in Apify. ## Step by step on Apify 1. Open Input in Apify Console. 2. For a new form, keep the small prefill: `keywords: ["coffee"]`, `language: "en"`, `country: "us"`, `client: "chrome"`, and `expansionModes: ["exact"]`. 3. Keep `maxResults: 100` for the demo. Set a maximum cost per run in Apify if you need a platform charge cap. 4. Click Start. 5. Open Output → Suggestions or the default Dataset. Check `suggestion`, `seed`, `generatedQuery` and `googleRank`. Open Run summary for empty responses, errors and limits. ## Use cases | Task | Settings | Fields to use | Next step | |---|---|---|---| | Content ideas | `keywords`, `expansionModes: ["exact", "questions"]` | `suggestion`, `generatedQuery`, `expansionToken` | Review phrases in your content plan. | | Locale comparison | Repeat the same `keywords` with different `language` / `country` | `seed`, `language`, `country`, `googleRank`, `fetchedAt` | Compare snapshots; differences are not search-volume measurements. | | Search interface research | `expansionModes: ["exact"]` | `suggestion`, `seed`, `googleRank` | Use the exported list in your own analysis or prototype. | ## Tips - Turn on question prefixes to get what, how and why phrases. - Run the same seeds with two countries to compare lists. - Set a maximum charge if you use many expansion modes. ## Limits ## Sample result ```json { "id": "sug_ea5550cf9d7b9437389da039680feb79", "suggestion": "coffee near me", "normalizedSuggestion": "coffee near me", "seed": "coffee", "normalizedSeed": "coffee", "generatedQuery": "coffee", "expansionMode": "exact", "expansionToken": null, "language": "en", "country": "us", "client": "firefox", "surface": "web", "googleRank": 1, "sourceUrl": "https://suggestqueries.google.com/complete/search?client=firefox&q=%3Credacted%3E&hl=en&gl=us", "sourceRequestId": "req_a11bd8afbabbaa481657418166b901ac", "fetchedAt": "2026-10-08T16:49:44.091Z", "metadata": { "suggestsubtypes": [ 512, 433 ] }, "duplicateOf": null } ``` ## Use it from code Actor ID: `cliqtomedia/google-autocomplete-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/google-autocomplete-scraper").call(run_input={ "keywords": [ "coffee" ], "language": "en" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-autocomplete-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"keywords": ["coffee"], "language": "en"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/google-autocomplete-scraper") result = tool.invoke({"run_input": {"keywords": ["coffee"], "language": "en"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [SEO data without a big suite](https://cliqtomedia.com/actors/use-cases/seo-research/): Collect keyword ideas and check your pages and your rivals' pages. Search results and trends coming soon. ## Similar tools - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) - [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/) - [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/) - [Google Ads Transparency Scraper - Ad Text, No Login](https://cliqtomedia.com/actors/google-ads-transparency-scraper/) - [Google Images Scraper - Image URLs, Sizes & Source Pages](https://cliqtomedia.com/actors/google-images-scraper/) - [Google News Scraper - Real Article URLs, No Login](https://cliqtomedia.com/actors/google-news-scraper/) --- # Google Flights Scraper for Prices and Times > Google Flights scraper for your route and dates. Get airlines, times, stops, CO2 and exact prices in your currency. One-way or round trip. No login. URL: https://cliqtomedia.com/actors/google-flights-scraper/ Category: Real estate, travel & cars · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/google-flights-scraper?fpr=cliqto Get Google Flights results for a route and dates as a table. Each row is one flight, with price, times and stops. Run it often to see how prices move. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `BKK` in From (airport code). Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Google Flights Scraper searches Google Flights for your route and dates and returns one row per flight: airline, flight numbers, departure and arrival time, duration, stops, layovers, CO₂ and the exact price in your currency. ### Good for - Compare fares and flight times for one route on one or more dates. - Find the cheapest departure day in a short date range. - Collect flight prices on a schedule to see how they change over time. ### Not a good fit - No booking, no booking links and no airline-site prices: the Actor only reads what Google Flights shows on its results page. - No price insights (price level, price history graph) and no multi-city trips. - Round trip: each row is an outbound flight with the round-trip total price, as Google shows it on the first step. Return flights are not listed. - Searches with children or lap infants: on some routes Google does not put the flights into the page and loads them later in the browser. Such a date gets a free `error` row with `SOURCE_INCOMPLETE`. With children, Google can also show fewer flights than for adults only. - Prices change often and can differ from the price on the airline website. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Flight search with results | $0.025 (from $0.014 on paid Apify plans) | One route and date searched on Google Flights that listed flights. Includes every flight row up to maxResults. | | Flight search without results | $0.001 | One route and date searched on Google Flights that listed no flights. Saves one not_found row. Searches that fail are free. | - One result: about $0.03. - 1,000 results: about $25.00. - Every day 100 results, for 30 days: about $75.00 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/google-flights-scraper?fpr=cliqto ## Questions ### Is there an official Google Flights API? No public one. This tool gives you the flight list as data. ### Can I book flights with it? No. It only reads the results page. There are no booking links. ### Is the price the same as the airline price? Not always. It is the price Google Flights shows at that time. ### Does it show return flights? For round trips, each row is an outbound flight with the round-trip total. ### Do I need a Google account, login or API key? No. The Actor reads the public Google Flights results page, without login or cookies. ### Why do I get fewer flights than in my browser? The Actor returns the flights Google puts on the first results page, up to `maxResults`. With children, Google can put fewer flights into the page. Booking options for each flight are not part of the output. ## Data fields - `status` (string): complete (a flight), not_found (Google shows no flights; one row per search) or error. Charges are per search, not per row: a date with flights is one flight-search event, a not_found row is one empty-search event, error rows are free. - `statusReason` (string): Plain-English reason for not_found and error rows; null for flights. - `errorCode` (string): Machine code for error rows, e.g. SOURCE_BLOCKED, DEADLINE_REACHED; null otherwise. - `route` (string): Route as ORIGIN-DESTINATION, e.g. BKK-SIN. - `origin` (string): Departure airport you searched (IATA). - `destination` (string): Arrival airport you searched (IATA). - `tripType` (string): one_way or round_trip. - `departureDate` (string): Searched departure date (YYYY-MM-DD). - `returnDate` (string): Searched return date for round trips; null for one-way. - `cabinClass` (string): Searched cabin class. - `adults` (integer): Adults in the search. - `children` (integer): Children in the search. - `infantsOnLap` (integer): Infants on lap in the search. - `rank` (integer): Position in Google's list for this date, 1 = first. - `isBest` (boolean): True when Google lists the flight among its "best" options. - `airline` (string): Airline name(s) as Google shows them, comma-separated. - `airlines` (array): Airline names. - `airlineCodes` (array): IATA codes of the marketing carriers. - `flightNumbers` (array): Flight numbers of every segment, e.g. ["SQ709"]. - `departureAirport` (string): Departure airport of this flight (IATA). - `arrivalAirport` (string): Arrival airport of this flight (IATA). - `departure` (string): Local departure date and time, YYYY-MM-DDTHH:MM (airport time zone). - `arrival` (string): Local arrival date and time, YYYY-MM-DDTHH:MM (airport time zone). - `durationMin` (integer): Total travel time in minutes, layovers included. - `stops` (integer): Number of stops (0 = nonstop). - `layovers` (array): Layovers: airport, city and duration in minutes. - `segments` (array): Each flown segment: flight number, airports, times, duration, aircraft, legroom. - `price` (number): Total price for all passengers in the given currency (round trip: total for both directions). null when Google shows no price. - `currency` (string): Currency of price (ISO code) as Google returned it. - `emissionsKg` (integer): Google's CO2 estimate for this flight per passenger, kg. - `typicalEmissionsKg` (integer): Google's typical CO2 for this route, kg. - `sourceUrl` (string): Google Flights URL of this search. - `fetchedAt` (string): When the row was fetched (ISO timestamp, UTC). ## Input settings - `origin` (string, required): Departure airport as a 3-letter IATA code, e.g. BKK, JFK, LHR. - `destination` (string, required): Arrival airport as a 3-letter IATA code, e.g. SIN, CDG. - `departureDate` (string, required): YYYY-MM-DD, or +N for N days from today (e.g. +30). Up to about 330 days ahead. - `returnDate` (string): Leave empty for one-way. YYYY-MM-DD or +N. For a round trip, each row is an outbound flight with the round-trip total price, as Google Flights shows it on the first step. - `additionalDepartureDays` (integer): Also search the next N days (0–14) to find the cheapest day. Each day is one search; the return date moves with it. - `adults` (integer): Adults (12+), 1–9. Prices are the total for all passengers. - `children` (integer): Children aged 2–11. On some routes Google does not return flights for searches with children or infants; such dates get a free SOURCE_INCOMPLETE row. - `infantsOnLap` (integer): At most one per adult; 9 passengers in total. - `cabinClass` (string): Cabin class to search. - `maxStops` (string): Only flights with at most this many stops. - `currency` (string): 3-letter ISO code such as USD, EUR, THB. The currency field of each row shows the currency Google really used. - `country` (string): 2-letter country code Google uses as the point of sale (prices can differ by country). - `maxResults` (integer): Maximum flight options returned for each departure date, in Google's order (best flights first). One charge per departure date that lists flights, however many rows it returns; a date with no flights costs $0.001 and error rows are free. - `proxyConfiguration` (object): Leave on "No proxy": the run connects directly and, only if Google refuses, moves to Apify datacenter and then residential proxy automatically (included in the price). Pick a datacenter group only if you need a specific one; the RESIDENTIAL group cannot be chosen by hand. ## Step by step on Apify 1. Open the Input tab. 2. Keep the prefilled route `BKK` → `SIN` and `departureDate` `+30` (30 days from today), or add your own airport codes and date. 3. Click Start. 4. Open the Flights view of the Dataset and check `airline`, `departure`, `price` and `currency`. ## Use cases | Task | Input | Key fields | Next step | |---|---|---|---| | Compare fares for a trip | `origin`, `destination`, `departureDate`, `returnDate` | `airline`, `departure`, `arrival`, `stops`, `price` | Export to CSV or a spreadsheet | | Find the cheapest day | `additionalDepartureDays` | `departureDate`, `price` (or `cheapestPrice` in `RUN_SUMMARY`) | Sort by `price` | | Track a route over time | Same input on a schedule | `flightNumbers`, `departure`, `price`, `fetchedAt` | Compare runs by flight number and departure time | | Travel CO₂ reports | Route and dates | `emissionsKg`, `typicalEmissionsKg`, `durationMin` | Join with your trip list | ## Tips - Search a date range to find the cheapest day to fly. - Set the country and currency to match where you buy. - Schedule the same search to build your own price history. ## Limits - Up to 15 departure dates per run (`additionalDepartureDays` 0–14) and up to 300 rows per date. This is a limit, not a typical count: in our tests Google listed 10–60 flights per date. - In our tests a search took about 1–3 seconds; 15 dates with 260 flights took 4.3 seconds. - Dates can be up to about 330 days ahead, as on Google Flights. ## Sample result ```json { "status": "complete", "statusReason": null, "errorCode": null, "route": "BKK-SIN", "tripType": "one_way", "departureDate": "2026-11-14", "returnDate": null, "cabinClass": "economy", "adults": 1, "rank": 1, "isBest": true, "airline": "Scoot", "airlineCodes": ["TR"], "flightNumbers": ["TR625"], "departureAirport": "BKK", "arrivalAirport": "SIN", "departure": "2026-11-14T11:50", "arrival": "2026-11-14T15:25", "durationMin": 155, "stops": 0, "layovers": [], "segments": [ { "flightNumber": "TR625", "airline": "Scoot", "operatedBy": null, "departureAirport": "BKK", "arrivalAirport": "SIN", "aircraft": "Boeing 787", "legroom": "31 in" } ], "price": 129.05, "currency": "USD", "emissionsKg": 96, "typicalEmissionsKg": 103, "sourceUrl": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjYtMTEtMTRqBRIDQktLcgUSA1NJTkABSAGYAQI&hl=en&gl=US&curr=USD", "fetchedAt": "2026-10-15T04:36:08.068Z" } ``` ## Use it from code Actor ID: `cliqtomedia/google-flights-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/google-flights-scraper").call(run_input={ "origin": "BKK", "destination": "SIN" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-flights-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"origin": "BKK", "destination": "SIN"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/google-flights-scraper") result = tool.invoke({"run_input": {"origin": "BKK", "destination": "SIN"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [99acres & MagicBricks India Property Scraper - No Login](https://cliqtomedia.com/actors/india-property-listings/) - [Events Scraper: Eventbrite, Meetup & Luma — No Login](https://cliqtomedia.com/actors/events-aggregator/) - [Redfin & Realtor Listings Scraper (US): Sale, Sold & Rent](https://cliqtomedia.com/actors/us-property-listings/) --- # Google Images Scraper > Google Images scraper: get full-size image URLs, width, height, title and source page for your keywords. Up to 300 images per query. No login or API key. URL: https://cliqtomedia.com/actors/google-images-scraper/ Category: Search, SEO & ads · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/google-images-scraper?fpr=cliqto Type a search phrase and get Google Images results as a table. You get image links, sizes, titles and source pages. No login and no API key. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `red bicycle` in Search queries. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Type a search phrase and get the Google Images results as a table: direct image URL, width and height, thumbnail, title, source page and domain, in Google's order. No login and no API key. A run with the prefilled query `red bicycle` and 20 images takes about a minute and costs about $0.06 on the Free plan. - Searches Google Images for each phrase in `queries`, in the country and language you choose. - Applies the Google filters you set: SafeSearch, size, type, color, time period and usage rights. - Reads up to 3 Google result pages per phrase. One page has about 100 images, so Google gives about 300 images per phrase at most. - Removes repeated images (the same image URL) inside one phrase and numbers the rest 1, 2, 3… in Google's order. - Saves one Dataset row per image and stops a phrase when it has `maxImages` images or when Google has no more. ### Good for - Build an image dataset for machine learning: many phrases, up to about 300 image links each, with sizes to filter small images. - SEO: see which pages and domains show up in Google Images for your keywords, and at which position. - Design and e-commerce: collect visual references, or check where your product photos appear. ### Not a good fit - It does not download or store images. You get links; the image files stay on the source sites and can disappear. - It does not give image licences. The `usageRights` filter is Google's label, not a licence. Check the rights on the source page before you use an image. - About 300 images per phrase at most, because Google shows no more. For more images, use more phrases (for example `red bicycle vintage`, `red bicycle kids`). - No reverse image search (search by picture) and no Google Lens. - Google results change over time and between runs. Two runs of the same phrase can differ by about 10% of images. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.005 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Google result page | $0.01 | One Google Images result page read (about 100 images), also when Google has no images for the query. Pages that could not be read are free. | | Image | $0.002 (from $0.0014 on paid Apify plans) | One saved image row with the image URL, size and source page. | - One result: about $0.007. - 1,000 results: about $2.00. - Every day 100 results, for 30 days: about $6.15 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/google-images-scraper?fpr=cliqto ## Questions ### Does it download the image files? No. It saves image links. You can download them later with your own tool. ### Can I use the images for free? Not always. The tool gives links, not a licence. Check the rights on the source page. ### Why do two runs give different images? Google changes results over time. In tests about 10% of images changed between runs. ### How many phrases can I search at once? From 1 to 100 phrases per run, with up to 300 images each. ### Do I need a Google account or an API key? No. The Actor reads public Google Images results. No login and no key. ### Can I get more than 300 images for one phrase? No, Google does not show more. Use several similar phrases; repeated images are removed only inside one phrase, so check `imageUrl` across phrases yourself. ## Data fields - `query` (string): The search query. - `position` (integer): 1-based position in Google Images results for the query, after removing duplicate images. - `title` (string): Title of the page the image comes from. - `imageUrl` (string): Direct URL of the full-size image on the source site. - `width` (integer): Full-size image width in pixels. - `height` (integer): Full-size image height in pixels. - `thumbnailUrl` (string): Google thumbnail URL (encrypted-tbn*.gstatic.com). - `thumbnailWidth` (integer): Thumbnail width in pixels. - `thumbnailHeight` (integer): Thumbnail height in pixels. - `sourcePageUrl` (string): URL of the page that shows the image. - `sourceDomain` (string): Domain of the source page, e.g. www.walmart.com. - `sourceName` (string): Site name as Google shows it, e.g. Walmart. - `fileSize` (string): File size as Google shows it, e.g. 80KB (text, not a number). - `dominantColor` (string): Main color of the image as rgb(r,g,b). - `countryCode` (string): Google country used for the search. - `languageCode` (string): Google language used for the search. - `fetchedAt` (string): When the Google results page was loaded (ISO 8601, UTC). ## Input settings - `queries` (array, required): What to search on Google Images, one phrase per line, e.g. 'red bicycle'. Up to 100 queries per run; duplicates are skipped. Google operators work (site:, quotes, -word). - `maxImages` (integer): How many images to return for each query (1–300). Google Images shows about 300 images per query at most; if it has fewer, you get all of them. - `countryCode` (string): Google country (gl). Results are ranked for searchers in this country. - `languageCode` (string): Google interface language (hl). It affects ranking and the language of page titles. - `safeSearch` (boolean): On: Google filters explicit images. Off: unfiltered results. - `size` (string): Google Images size filter. - `type` (string): Google Images type filter. - `color` (string): Google Images color filter. - `timePeriod` (string): Only images Google indexed within this period. - `usageRights` (string): Google's usage-rights filter. It is Google's label, not a licence: check the rights on the source page before using an image. ## Step by step on Apify 1. Open the Input tab. 2. Keep the prefilled phrase `red bicycle` in Search queries (`queries`), or type your own, one per line. 3. Keep Images per query (`maxImages`) at 20, or choose 1–300. 4. Click Start. 5. Open the Output tab and look at the Images view: a preview, the title, the image URL, the size and the source page for each image. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | ML image dataset | many `queries`, `maxImages` 300, `size` `large` | image row | `imageUrl`, `width`, `height`, `query` | download the URLs with your own tool, export CSV/JSON | | SEO in Google Images | your keywords, `countryCode` | image row | `position`, `sourceDomain`, `sourcePageUrl` | schedule weekly, compare positions in a sheet | | Visual references | a few phrases, `type`, `color` | image row | `thumbnailUrl`, `imageUrl`, `sourcePageUrl` | open the Images view, export to Google Sheets | ## Tips - Use the size filter to skip small images. - Use several similar phrases if you need more than 300 images. - Check the usage rights on the source page before you reuse an image. ## Limits - 1–100 search phrases per run, 1–300 images per phrase. Google shows about 280–295 unique images per phrase, so a phrase can end with fewer than you asked for (status `exhausted`). - Measured on the cloud (256 MB): 20 images ≈ 45–70 s; 10 phrases × 100 images ≈ 2–3 min; 30 phrases × 300 ≈ 11 min; 100 phrases × 300 (28,568 images) ≈ 34 min. - The default timeout is 1 hour, which fits the largest input. Memory is fixed at 256 MB; peak use was about 80 MB. - Each Google page gets up to 3 attempts and up to 120 seconds. A phrase whose pages keep failing gets status `error`; you are not charged for failed pages. - If Google cannot be read on the first phrase, the run stops there and does not start the other phrases (status `skipped`). Later in a run, 3 failed pages in a row also stop new phrases. - The Actor saves image links, not image files. ## Sample result ```json { "query": "red bicycle", "position": 1, "title": "24 in. Red 21-Speed Mechanical Disc Brake Mountain Bike for Teenagers outwyadironch43 - The Home Depot", "imageUrl": "https://images.thdstatic.com/productImages/ee2aa086-bc34-4653-8fda-ab7879d28920/svn/reds-pinks-bikes-outwyadironch43-64_600.jpg", "width": 600, "height": 600, "thumbnailUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT5OkkXYwisrBprY_ohTFjwk4QbVwfWv62tA9h93MKQGg&s=10", "thumbnailWidth": 554, "thumbnailHeight": 554, "sourcePageUrl": "https://www.homedepot.com/p/24-in-Red-21-Speed-Mechanical-Disc-Brake-Mountain-Bike-for-Teenagers-outwyadironch43/325010151", "sourceDomain": "www.homedepot.com", "sourceName": "The Home Depot", "fileSize": "39KB", "dominantColor": "rgb(216,66,69)", "countryCode": "us", "languageCode": "en", "fetchedAt": "2026-10-15T04:51:03.022Z" } ``` ## Use it from code Actor ID: `cliqtomedia/google-images-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/google-images-scraper").call(run_input={ "queries": [ "red bicycle" ], "maxImages": 20 }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-images-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"queries": ["red bicycle"], "maxImages": 20}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/google-images-scraper") result = tool.invoke({"run_input": {"queries": ["red bicycle"], "maxImages": 20}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [SEO data without a big suite](https://cliqtomedia.com/actors/use-cases/seo-research/): Collect keyword ideas and check your pages and your rivals' pages. Search results and trends coming soon. ## Similar tools - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) - [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/) - [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/) - [Google Ads Transparency Scraper - Ad Text, No Login](https://cliqtomedia.com/actors/google-ads-transparency-scraper/) - [Google News Scraper - Real Article URLs, No Login](https://cliqtomedia.com/actors/google-news-scraper/) --- # Google Jobs Scraper for job lists with salary and apply links > Google Jobs scraper for job titles, companies, salary text, dates and apply links. Pick a city and country. No Google login or API key. Export to CSV. URL: https://cliqtomedia.com/actors/google-jobs-scraper/ Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/google-jobs-scraper?fpr=cliqto Type a job title and a city. You get the jobs Google shows, one row per job. Each row has the company, salary text, posting age and the links to apply. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `python developer` in Job searches. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Google Jobs Scraper searches Google Jobs for your job titles and a location and returns one row per job: title, company, location, salary, job type, posting age, full description and the apply links to LinkedIn, Indeed or the employer site. It reads the public Google Jobs results page, so you need no Google login and no API key. The default input (`python developer` in Berlin, 10 jobs) usually takes 10–60 seconds and costs $0.033. - You add one or more job searches, for example `python developer` or `registered nurse`, and a location. - The Actor opens the Google Jobs results page for each search in the right Google country. - It reads every job card: title, company, location, the site Google found the job on (`via`), posting age, salary and job type. - It reads the job panel too: the full description, Google's highlights and all apply links, without tracking parameters. - It removes duplicate jobs (same Google job id) and saves one Dataset row per job. - Fast mode reads one Google page per search, about 10 jobs. Deep mode repeats each search with Google's date and job-type filters and removes duplicates, so you get several times more jobs. ### Good for - Job market research: who hires for a role in a city, and on which job boards. - Lead lists for recruiters and staffing agencies: companies with open roles, with the link to each job. - Salary checks: Google's salary text where the job has one. - A daily job feed for a niche job board, a Slack channel or a spreadsheet. ### Not a good fit - 8 countries only: United States, United Kingdom, Canada, India, Germany, France, Spain and Brazil (`countryCode`). Google shows the texts in the language of that country, for example `vor 1 Tag` and `Vollzeit` in Germany. - Google shows about 10 jobs per search page. Fast mode gives about 10 jobs per search; deep mode about 20–70 (our tests). For more jobs, add more searches (up to 50) or more specific titles. - `salary` is often `null`: Google shows a salary only for some jobs (0–40 % in our tests). - `highlights` is often `null` in fast mode: Google does not send this block on many pages. The full `description` is still there. - No recruiter names, emails or phone numbers. The Actor saves only the public job post. - Google decides which jobs it shows. Two runs a few minutes apart can return a slightly different set or order. - Google's terms do not allow automated access to Google Search. You are responsible for how you use the data. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.01 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Google Jobs search page | $0.013 | One Google Jobs results page that Google answered (up to 10 jobs), including pages with no jobs. Pages that failed are not charged. | | Job listing | $0.001 (from $0.00085 on paid Apify plans) | One unique job saved to the Dataset. Duplicates, not_found and error rows are free. | - One result: about $0.01. - 1,000 results: about $1.01. - Every day 100 results, for 30 days: about $3.30 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/google-jobs-scraper?fpr=cliqto ## Questions ### Can I scrape Google Jobs without a Google account? Yes. The tool reads the public Google Jobs page. You need no login, cookies or API key. ### Which countries can I search? Eight countries: the US, UK, Canada, India, Germany, France, Spain and Brazil. ### How many jobs do I get per search? Fast mode gives about 10 jobs per search. Deep mode gave about 20 to 70 in tests. ### Why do many jobs have no salary? Google shows a salary only when the job post has one. The tool never guesses a salary. ### Do I need a Google account or API key? No. The Actor reads the public Google Jobs results page without login, cookies or keys. ### Is this the official Google Jobs API? No. Google has no public API for Google Jobs search results. This Actor is not made by or linked to Google. ### Why are some texts in German or French? Google shows jobs in the language of the country you search. Search in Germany, and `postedAt` says `vor 2 Tagen` and `employmentType` says `Vollzeit`. `postedAtApprox` gives a date that is the same in every language. ### Why is salary empty for most jobs? Google shows a salary only when the job post or job board gives one. The Actor does not guess: no salary on Google means `salary: null`. ### Can I get the recruiter's email or phone? No. The Actor saves only the public job post and does not collect personal contact data. ## Data fields - `status` (string): complete: a job; partial: a deep search where some Google pages did not answer (jobs of the other pages are in their own rows); not_found: Google has no jobs for this search; error: Google did not answer. - `title` (string): Job title as the employer wrote it. - `company` (string): Employer name. - `location` (string): Job location as Google shows it, e.g. "Berlin, Germany" or "Anywhere". - `via` (string): Site Google found the job on, e.g. "LinkedIn" or "via Indeed". - `postedAt` (string): Posting age as Google shows it, e.g. "2 days ago" or "vor 1 Tag"; null when Google does not show it. - `postedAtApprox` (string): Approximate posting date (YYYY-MM-DD) = fetchedAt minus postedAt; null for open ranges such as "30+ days ago". - `salary` (string): Salary as Google shows it, e.g. "$104K–$156K a year"; null when the job has no salary (not 0). - `employmentType` (string): Job type as Google shows it, e.g. "Full-time" or "Vollzeit". - `workFromHome` (boolean): true when Google tags the job as work from home; null when it does not say. - `description` (string): Full job description as plain text; null when includeDescription is off. - `highlights` (array): Google's job highlights (Qualifications, Responsibilities, Benefits); null when Google shows none or includeDescription is off. - `applyLinks` (array): Where to apply: the employer site and job boards, with tracking parameters removed. - `jobId` (string): Google's job id; the same job has the same id across searches and runs. - `googleJobsUrl` (string): Google Jobs page that opens this job. - `position` (integer): Order of the job in this search's results (1 = first, after removing duplicates); null on status rows. - `query` (string): Your job search. - `searchLocation` (string): Location from your input; null when empty. - `countryCode` (string): Google country searched (us, gb, ca, in, de, fr, es, br). - `searchVariant` (string): Deep mode: which search found the job (base, datePosted:week, employmentType:parttime…); null in fast mode. - `source` (string): Always google_jobs. - `sourceUrl` (string): Google search URL that was fetched. - `fetchedAt` (string): When the page was fetched (ISO 8601, UTC). - `statusReason` (string): Why the row is partial, not_found or error; null on complete rows. - `errorCode` (string): Machine-readable error code on error rows, e.g. SOURCE_TIMEOUT; null otherwise. ## Input settings - `queries` (array, required): What to search on Google Jobs, one per line, e.g. "python developer" or "registered nurse". Up to 50 searches; duplicates are removed. - `location` (string): City, region or "remote", added to every search, e.g. "Berlin", "Austin, TX" or "London". Leave empty to search the whole country: Google Jobs needs a place, so the country name is added ("nurse" → "nurse USA"). - `countryCode` (string): Google country and language to search in. Auto picks it from the location ("Berlin" → Germany, "Austin, TX" → United States); unknown places use the United States. - `datePosted` (string): Only jobs posted in this period. Uses Google's own date filter, then drops jobs whose shown posting date is older (they are not written or charged). - `employmentType` (string): Only jobs of this type. Uses Google's own job-type filter, then drops jobs whose shown job type is a different one (not written or charged). - `mode` (string): Google Jobs shows about 10 jobs per search. Deep mode repeats each search with Google's date and job-type filters and removes duplicates, so you get several times more jobs. - `maxJobs` (integer): Stop after this many jobs in total for the run. You pay only for jobs written to the Dataset. - `includeDescription` (boolean): Add the full job description and Google's highlights (qualifications, responsibilities, benefits). Turn off for smaller rows. ## Step by step on Apify 1. Open the Input tab. 2. In Job searches (`queries`), keep `python developer` or add your own job title. 3. Keep Location `Berlin` and Max jobs `10`, or change them. Country `auto` picks the country from the location. 4. Click Start. 5. Open the Output tab. The Jobs table shows `title`, `company`, `location`, `salary` and the apply links. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Job market research | `queries` + `location`, `mode: "deep"` | Job | `title`, `company`, `via`, `postedAt` | CSV or Excel export | | Recruiting lead list | `queries` like `"sales manager"` + `datePosted: "week"` | Job | `company`, `title`, `location`, `applyLinks` | Google Sheets or CRM through Apify integrations | | Salary check | `queries` + `location` | Job | `salary`, `employmentType`, `title` | Spreadsheet | | Daily job feed | `queries` + `datePosted: "today"` on a schedule | Job | `jobId`, `title`, `googleJobsUrl` | Slack, email or a website through webhooks | ## Tips - Use deep mode when one search gives too few jobs. It finds several times more. - Add more specific titles, like "junior python developer", to get more unique jobs. - Use postedAtApprox to sort by date. It works the same in every language. ## Sample result ```json { "status": "complete", "title": "Python Team Lead, Integration team", "company": "Fliff Inc", "location": "Beliebiger Ort", "via": "LinkedIn", "postedAt": "vor 1 Tag", "postedAtApprox": "2026-10-14", "salary": null, "employmentType": "Vollzeit", "workFromHome": true, "description": "We’re looking for a Python Team Lead to join our Integration team, which owns a broad set of critical integrations across the product…", "highlights": null, "applyLinks": [ { "title": "LinkedIn", "url": "https://de.linkedin.com/jobs/view/python-team-lead-integration-team-at-fliff-inc-4479228357" }, { "title": "Startup Jobs", "url": "https://startup.jobs/python-team-lead-integration-team-fliff-inc-10437417" } ], "jobId": "eAHxzL0ATotpbjXSAAAAAA==", "googleJobsUrl": "https://www.google.de/search?ibp=htl;jobs&q=python+developer+Berlin&htidocid=eAHxzL0ATotpbjXSAAAAAA%3D%3D&hl=de-DE#…", "position": 2, "query": "python developer", "searchLocation": "Berlin", "countryCode": "de", "searchVariant": null, "source": "google_jobs", "sourceUrl": "https://www.google.de/search?q=python+developer+Berlin&udm=8&hl=de&gl=de", "fetchedAt": "2026-10-15T06:20:55.335Z", "statusReason": null, "errorCode": null } ``` ## Use it from code Actor ID: `cliqtomedia/google-jobs-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/google-jobs-scraper").call(run_input={ "queries": [ "python developer" ], "location": "Berlin" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"queries": ["python developer"], "location": "Berlin"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/google-jobs-scraper") result = tool.invoke({"run_input": {"queries": ["python developer"], "location": "Berlin"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [Remote Jobs Aggregator - RemoteOK, WWR & Himalayas, No login](https://cliqtomedia.com/actors/remote-jobs-aggregator/) - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) --- # Google News Scraper > Google News scraper: get title, publisher, date and the real article URL by keyword or topic, for any country and language. No login or API key. URL: https://cliqtomedia.com/actors/google-news-scraper/ Category: Search, SEO & ads · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/google-news-scraper?fpr=cliqto Search Google News by keyword, topic or Top stories. Each row has the title, publisher, date and the real article link. You need no Google account. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `apify` in Search queries. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Google News Scraper searches Google News by keyword, topic or Top stories and returns one row per article: title, publisher, publish date and the real article URL on the publisher's site, not the Google News redirect. It reads the public Google News RSS feeds, so you need no Google login and no API key. A run with the default input (`apify`, 20 articles) usually takes 5–20 seconds and costs about $0.075. - You add keywords, topics or both, and choose a language and a country (a Google News "edition"). - The Actor reads the matching Google News RSS feeds: search, topic sections or the Top stories front page. - For each article it decodes the Google News link (`news.google.com/rss/articles/…`) into the original publisher URL. - It saves one Dataset row per article. Topic and Top stories rows also list other outlets that cover the same story (`relatedArticles`). - Google returns at most 100 articles per feed. When you ask for more, the Actor searches one day at a time (Google's `after:` and `before:` operators) and removes duplicates. ### Good for - Daily or hourly news monitoring for brands, people, companies or topics. - Media lists for PR: who wrote about a subject, when, and the link to the story. - News in many languages: `de` for Germany, `pt-BR` for Brazil, `ja` for Japan, `zh-TW` for Taiwan. - A clean news list for an AI agent, a spreadsheet or a BI tool. ### Not a good fit - No full article text, images or summaries. Google News RSS gives only the title and publisher. For article text, send `articleUrl` to an article extractor. - Up to 1,000 articles per query, and up to 20 queries and topics per run. Our largest test run saved 5,000 articles (5 queries × 1,000) in about 34 minutes. A run stops after about 50 minutes and keeps what it saved (`RUN_SUMMARY.status: "CAPPED"`), so split bigger jobs into several runs. Topics and Top stories read one feed each, so they return only what Google shows in that section (at most about 100 articles). - Google decides which articles it shows. Two runs a few minutes apart can return a slightly different set or order. - Google News RSS is for personal, non-commercial use under Google's terms. You are responsible for how you use the data. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.0025 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | News article | $0.0036 (from $0.0009 on paid Apify plans) | One complete or partial article row saved in the Dataset, with the decoded publisher URL included. Not-found and error rows are free. | - One result: about $0.0061. - 1,000 results: about $3.60. - Every day 100 results, for 30 days: about $10.88 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/google-news-scraper?fpr=cliqto ## Questions ### Is there an official Google News API? No. Google has no public Google News API. This tool reads the public RSS feeds. ### Do I get the article text? No. Google News RSS has no snippet. Send the article link to an article text tool. ### Can I get more than 100 articles for a keyword? Yes, up to 1,000. The tool searches one day at a time and removes duplicates. ### Why are the links not news.google.com links? The tool decodes Google's redirect links into the publisher's own URL. ### Do I need a Google account or API key? No. The Actor reads public Google News RSS feeds without login, cookies or keys. ### Why are the titles shorter than in Google News? Google adds " - Publisher" to each title in the feed. The Actor removes it and puts the publisher into `sourceName`. ### Why is the order or set of articles different between runs? Google decides which articles each feed shows, and this changes during the day. Rows keep Google's order in `position`. Use `articleId` to compare runs. ## Data fields - `status` (string): Row result: complete, partial (article found but the publisher URL could not be decoded), not_found (no articles for this query or topic) or error. Only complete and partial rows are charged. - `statusReason` (string): Plain-English reason for partial, not_found or error rows; null when complete. - `errorCode` (string): Machine code for error rows, e.g. SOURCE_BLOCKED, RATE_LIMITED, DEADLINE_REACHED; null otherwise. - `feedType` (string): Where the row came from: a search query, a topic section or Top stories. - `query` (string): Your search query as given; null for topic rows. - `topic` (string): Topic section (BUSINESS, TECHNOLOGY…); null for search rows. - `position` (integer): 1-based order of the article within its query or topic (newest first for deep search). - `title` (string): Article headline, without the publisher suffix Google adds. - `sourceName` (string): Publisher name, e.g. Reuters. - `sourceUrl` (string): Publisher home page as Google News lists it, e.g. https://www.reuters.com. - `articleUrl` (string): Original article URL on the publisher's site, decoded from the Google News link. null when resolveSourceUrl is off (the row stays complete) or decoding failed (the row is partial). - `googleNewsUrl` (string): Google News link to the article (news.google.com/rss/articles/…). - `articleId` (string): Google News article ID. - `publishedAt` (string): Publish time, ISO 8601 UTC, as Google News reports it. - `relatedArticles` (array): Other outlets covering the same story (topic and Top stories rows): title, sourceName, googleNewsUrl. Empty for most search rows. - `language` (string): Edition language code used for this run, e.g. en. - `country` (string): Edition country code used for this run, e.g. US. - `feedUrl` (string): The Google News RSS feed this row came from (provenance). - `fetchedAt` (string): When the Actor fetched this row, ISO 8601 UTC. ## Input settings - `queries` (array): Keywords or phrases to search on Google News, one per line, e.g. apify or "electric cars". Google News search operators work: "exact phrase", OR, -exclude, site:reuters.com, intitle:word. Up to 20 queries and topics in total. - `topics` (array): Google News sections for the chosen country: TOP_STORIES (the front page), WORLD, NATION (national news), BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH. Topic rows also list other outlets covering the same story. - `country` (string): Google News edition country as a two-letter code, e.g. US, GB, DE, FR, IN, BR, JP. Changes which outlets and stories Google shows. - `language` (string): Edition language as a two-letter code, e.g. en, de, fr, es, pt, ja, zh. Use the language people read in that country (de for DE, pt for BR). A locale such as zh-TW, pt-BR or en-GB also works and sets the country. - `maxArticles` (integer): Maximum articles for each query and topic, 1–1,000. Google returns at most 100 per feed; for more, the Actor searches day by day, back to the "since" date (or 30 days). Topics return up to about 100. Each article row is charged; not-found and error rows are free. - `since` (string): Only articles published after this point: a date (2026-10-01) or a period back from now (1h, 24h, 7d, 2w, 3m, 1y). Leave empty for no date filter. - `resolveSourceUrl` (boolean): Decodes each Google News link (news.google.com/rss/articles/…) into the original article URL on the publisher's site. Included in the price; turn off only for faster runs when the Google link is enough. - `proxyConfiguration` (object): Apify datacenter proxy by default. If Google blocks it, the Actor switches to Apify residential proxy by itself. Choose your own proxy group or URLs to turn this off. The Actor never solves CAPTCHAs. ## Step by step on Apify 1. Open the Input tab. 2. In Search queries (`queries`), keep `apify` or add your own keyword, for example `electric cars`. 3. Keep Language `en`, Country `US` and Max articles per query or topic `20`, or change them. 4. Click Start. 5. Open the Output tab. The Articles table shows `title`, `sourceName`, `publishedAt` and `articleUrl`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Brand and competitor monitoring | `queries` + `since: "24h"` on a schedule | Article | `query`, `title`, `sourceName`, `articleUrl`, `publishedAt` | Slack, email or Google Sheets through Apify integrations | | PR media list | `queries` like `"your company"` + `since: "30d"` | Article | `sourceName`, `sourceUrl`, `articleUrl` | CSV or Excel export | | Country news overview | `topics: ["BUSINESS"]`, `country: "DE"`, `language: "de"` | Article with related coverage | `title`, `sourceName`, `relatedArticles` | Dashboard or newsletter | | News context for an AI agent | `queries` + small `maxArticles` | Article | `title`, `articleUrl`, `publishedAt` | Apify MCP server | ## Tips - Use the published-since filter for daily or hourly checks. - Pick a country and language to get local news editions. - Use the article ID to compare results between runs. ## Sample result ```json { "status": "complete", "statusReason": null, "errorCode": null, "feedType": "topic", "query": null, "topic": "BUSINESS", "position": 1, "title": "Waren bei Galeria in Regensburg plötzlich hinter Absperrband – Ein Hersteller spricht Klartext", "sourceName": "Mittelbayerische Zeitung", "sourceUrl": "https://www.mittelbayerische.de/", "articleUrl": "https://www.mittelbayerische.de/lokales/stadt-regensburg/waren-bei-galeria-in-regensburg-ploetzlich-hinter-absperrband-ein-hersteller-spricht-klartext-22206179", "googleNewsUrl": "https://news.google.com/rss/articles/CBMi8AFBVV95cUxPWnVHaWd…?oc=5", "articleId": "CBMi8AFBVV95cUxPWnVHaWd…", "publishedAt": "2026-10-14T17:01:36.000Z", "relatedArticles": [ { "title": "Flatterband im Kaufhaus: Was hinter den gesperrten Galeria-Regalen steckt", "sourceName": "WDR", "googleNewsUrl": "https://news.google.com/rss/articles/CBMifkFVX3lx…?oc=5" } ], "language": "de", "country": "DE", "feedUrl": "https://news.google.com/rss/headlines/section/topic/BUSINESS?hl=de&gl=DE&ceid=DE%3Ade", "fetchedAt": "2026-10-15T04:22:36.577Z" } ``` ## Use it from code Actor ID: `cliqtomedia/google-news-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/google-news-scraper").call(run_input={ "queries": [ "apify" ], "country": "US" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-news-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"queries": ["apify"], "country": "US"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/google-news-scraper") result = tool.invoke({"run_input": {"queries": ["apify"], "country": "US"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [SEO data without a big suite](https://cliqtomedia.com/actors/use-cases/seo-research/): Collect keyword ideas and check your pages and your rivals' pages. Search results and trends coming soon. ## Similar tools - [RSS & Atom Feed Reader / Monitor](https://cliqtomedia.com/actors/rss-atom-feed-reader-monitor/) - [Substack Newsletter Scraper](https://cliqtomedia.com/actors/substack-newsletter-scraper/) - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) - [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/) - [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/) --- # Google Patent Details Scraper > Google Patents scraper for patent numbers you know. Get title, dates, abstract, and in full mode claims, description and family links. URL: https://cliqtomedia.com/actors/google-patents-scraper/ Category: Science & research data · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/google-patents-scraper?fpr=cliqto Add patent numbers or Google Patents links you already have. Get the title, dates and abstract for each one. Choose full detail to add claims and description. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `US9014905B1` in Publication numbers. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Fetch **Google patent details** for publication numbers you already know. Get a title, dates, an abstract and source names. Choose full detail to add claims, description, citations and family links from the same public page. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Saved patent row | $0.00199 | One verified patent row saved to the Dataset. | | Start fee | $0.0007 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | - One patent: about $0.0027. - 1,000 patents: about $1.99. - Every day 100 patents, for 30 days: about $5.99 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/google-patents-scraper?fpr=cliqto ## Questions ### Can I search patents by keyword? No. You need known publication numbers or exact patent links. ### Do I need a Google account? No. It reads public patent pages. ### Does full detail cost more? No. Both modes cost the same per saved patent. ### Will I get every family member? Only the ones shown on that patent page. ### Does it search Google Patents? No. Add known publication numbers or exact patent detail URLs. Keyword queries, application-number lookup and search filters are not supported. ### Do I need Google credentials? No. Only public detail pages are read. The Actor does not log in or solve access challenges. ### Is full text copied exactly? The Actor extracts plain page text and joins whitespace. It preserves Unicode and source content within the stated caps. HTML tags are removed; claim arrays keep page order. It does not fetch PDFs, translate text itself or generate a summary. ### Can I use legal status as a decision? Treat it as a source field. It is not legal advice, a validity judgment, an expiration guarantee or complete prior-art analysis. ## Input settings - `patentUrls` (array): HTTPS Google Patents /patent/ detail URLs only. - `publicationNumbers` (array): Known public publication identifiers for direct detail extraction. - `language` (string): Two-letter lower-case language code used for the public detail page. - `detailLevel` (string): Metadata or full detail from the same public patent page. - `maxItems` (integer): Global hard cap for saved unique publications in one run. Up to 100. - `includePdfLink` (boolean): Returns a source link only; PDF and image assets are never downloaded. ## Step by step on Apify 1. Open Input. A new form suggests `US9014905B1` in `publicationNumbers`. 2. Keep this number for a small first run. The form suggestion is not an API default. 3. Click Start. 4. Open Dataset and check `publicationNumber`, `title` and `canonicalUrl`. 5. Open RUN_SUMMARY to check every input outcome. ## Use cases | Your task | Input | Key fields | Next step | |---|---|---|---| | Build a table from a known patent list | `publicationNumbers` | `title`, `dates`, `assignees` | Export the Dataset | | Read claims and description | `detailLevel: "full"` | `claims`, `description`, `truncation` | Check the source page and text limits | | Compare source family links | `detailLevel: "full"` | `family`, `relatedApplications` | Open each source link yourself | ## Tips - Use publication numbers like US9014905B1 or EP1000000A1. - One run saves up to 100 patents. - Check the truncation field. Long text can be cut. ## Sample result ```json { "schemaVersion": "1", "status": "PATENT_SAVED", "publicationNumber": "US9014905B1", "canonicalUrl": "https://patents.google.com/patent/US9014905B1/en", "applicationNumber": "US14/166,502", "title": "Cyclist hand signal detection by an autonomous vehicle", "dates": { "priority": "2014-01-28", "filing": "2014-01-28", "publication": "2015-04-21", "grant": null }, "family": { "simpleFamilyId": "52822648", "members": [{ "publicationNumber": "US9014905B1", "countryCode": "US", "kindCode": "B1", "title": "Cyclist hand signal detection by an autonomous vehicle", "date": "2014-01-28", "sourceUrl": "https://patents.google.com/patent/US9014905B1/en" }] }, "detailLevel": "full", "truncation": [], "search": null } ``` ## Use it from code Actor ID: `cliqtomedia/google-patents-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/google-patents-scraper").call(run_input={ "publicationNumbers": [ "US9014905B1" ], "language": "en" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-patents-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"publicationNumbers": ["US9014905B1"], "language": "en"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/google-patents-scraper") result = tool.invoke({"run_input": {"publicationNumbers": ["US9014905B1"], "language": "en"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [DOI Metadata & Bibliography Enrichment](https://cliqtomedia.com/actors/doi-bibliography-enrichment/) - [ClinicalTrials.gov Studies Search & Monitor](https://cliqtomedia.com/actors/clinicaltrials-gov-studies-monitor/) - [DataCite Research Dataset Search](https://cliqtomedia.com/actors/datacite-dataset-search/) - [Europe PMC Literature Search & Monitor](https://cliqtomedia.com/actors/europe-pmc-literature-search/) - [GBIF Biodiversity Occurrence Search](https://cliqtomedia.com/actors/gbif-occurrence-search/) - [Google Scholar Search Scraper - Citations & PDFs, No Login](https://cliqtomedia.com/actors/google-scholar-scraper/) --- # Google Play Search, Rank and App Details > Google Play rank tracker for many keywords and countries. Or get app details by package name: rating, installs range, price and version. URL: https://cliqtomedia.com/actors/google-play-apps-search/ Category: Reviews & app stores · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/google-play-apps-search?fpr=cliqto Search Google Play for many keywords in many countries in one run. Each app gets a rank. Or add package names and get app details. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `pdf scanner` in Search terms. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Search [Google Play](https://play.google.com/store/apps) by keyword in one or many countries and get the ranked list of apps for every term, with rating, ratings count, install range, price, genre, age rating, version and last update. Or add package names or Google Play URLs and get the same app details. - `search` — for each keyword (term) and country, it runs one Google Play search and returns the apps in the same order as Google shows them. Every row has `rank` (1, 2, 3…), `term` and `country`. By default it also opens each app page and adds installs, ratings count, genre, age rating, version and last update. - `details` — for each package name (for example `com.whatsapp`) or Google Play URL, it opens the app page in every country you choose and returns one row per app and country. ### Good for - App store optimization (ASO): check which apps rank for your keywords in each country. - Rank tracking: see where your own apps stand for 10–30 keywords, run after run. - Competitor research: compare install range, rating, price, in-app purchases and last update of rival apps. - App catalog enrichment: turn a list of package names into rows with title, developer, genre and age rating. ### Not a good fit - No exact install numbers. Google shows a public range such as `10,000,000+`. The Actor returns this text in `installs` and its lower bound in `minInstalls`. It never estimates an exact count. - About 30 apps per search. Google's search page shows about 30 apps for a term and has no next page. `maxItems` is 1–30. - No reviews, screenshots, permissions, data safety or developer contact details (email, phone, address). - No top charts, categories or "similar apps" lists. - Results are what Google shows to a signed-out visitor in that country and language. Personal results on a phone can differ. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.003 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Google Play query answered | $0.0001 | One keyword search (term × country) or one app ID lookup (app ID × country) that Google Play answered, even when it had no apps or the app does not exist. Failed or skipped queries are free. | | App row | $0.00045 (from $0.00038 on paid Apify plans) | One app stored in the dataset (with app page details when they are on). Partial, not_found and error rows are free. | - One app: about $0.0034. - 1,000 apps: about $0.46 (3 runs of up to 400). - Every day 100 apps, for 30 days: about $1.44 a month. - 400 apps once a week (4 runs a month): about $0.73 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/google-play-apps-search?fpr=cliqto ## Questions ### Why no exact install numbers? Google Play shows only a range, like 10,000,000+. The tool returns that range. ### Are results the same as on my phone? Not always. The tool sees what a signed-out visitor sees. ### Why is the version empty? Many big apps show Varies with device instead of a number. ### Do I need a Google account? No. It reads public pages without login. ### Why don't I get the exact number of installs? Google Play shows only a range, such as `10,000,000+`. Other numbers you may see elsewhere are estimates. This Actor returns only what Google shows: `installs` and its lower bound `minInstalls`. ### Why is `score` null for some apps? Nobody has rated the app yet. In that case `ratings` is 0 and `score` is null, not 0. ### Why is `version` null? Many large apps show "Varies with device" instead of a version number. The Actor returns `null` instead of a wrong value. ### How fresh is the data? Every run reads Google Play live. `fetchedAt` shows when each row was read. ## Data fields - `status` (string): Row result: complete (app data, charged), partial (search row whose app page failed to load or answered 404; search fields only, not charged), not_found (search with no apps, or app ID not on Google Play in that country) or error (see errorCode, not charged). - `mode` (string): search or details, as in the input. - `queryType` (string): term for search rows, appId for details rows. - `query` (string): The search term or app ID this row answers. Grouped status rows list several IDs, comma-separated. - `queryIds` (array): Only on grouped details status rows: the app IDs this one not_found or error row covers (one row per batch of up to 10 IDs in one country). null on app rows and search rows. - `term` (string): Search term (search mode). null in details mode. - `country` (string): Two-letter Google Play country code used for the request (gl). null only on the INVALID_IDENTIFIER error row, whose identifiers were never sent to Google Play. - `language` (string): Language code used for the request (hl); texts such as genre and content rating come in this language. - `rank` (integer): 1-based position of the app in Google Play search results for this term and country, as shown to a signed-out user. null in details mode. - `isTracked` (boolean): true when the app is in trackAppIds; null when no apps are tracked or in details mode. - `appId` (string): Google Play package name, e.g. com.whatsapp. - `title` (string): App name. - `summary` (string): Short promo text from the app page. null without app details. - `developer` (string): Developer name as shown on Google Play. - `developerId` (string): Google Play developer ID: numeric, or a name-style ID such as WhatsApp+LLC. - `developerUrl` (string): Developer page on Google Play, built from developerId. - `score` (number): Average star rating (1–5), rounded to 3 decimals. null when the app has no ratings. - `ratings` (integer): Number of ratings shown by Google; 0 for an app nobody has rated yet. null without app details. - `reviews` (integer): Number of written reviews shown by Google; 0 for an app nobody has rated yet. null without app details. - `ratingHistogram` (object): Ratings per star: oneStar … fiveStars. null without app details. - `installs` (string): Google's public install range, e.g. 10,000,000+. Google does not publish exact install counts, and this Actor does not estimate them. null without app details. - `minInstalls` (integer): Lower bound of the install range as a number (10,000,000+ → 10000000), for sorting and filtering. Not an exact count. - `price` (number): Price in currency units; 0 for free apps. - `free` (boolean): true for free apps. - `currency` (string): ISO currency of price for this country, e.g. USD or EUR. - `priceText` (string): Price as Google shows it, e.g. Free or $4.99. null without app details. - `offersIAP` (boolean): true when the app has in-app purchases, false when it has none. null without app details. - `iapRange` (string): In-app purchase price range as shown by Google, e.g. $0.99 - $49.99 per item. - `adSupported` (boolean): true when Google marks the app as containing ads. null without app details. - `genre` (string): Main category name in the request language, e.g. Productivity. - `genreId` (string): Main category ID, e.g. PRODUCTIVITY or GAME_PUZZLE. - `contentRating` (string): Age rating for this country, e.g. Everyone, Teen, USK: Ages 12+. - `released` (string): Release date as Google shows it (text in the request language, e.g. May 31, 2017). null when Google hides it. - `updatedAt` (string): Last update time of the app on Google Play, ISO 8601 UTC. - `version` (string): Current version. null when Google shows Varies with device. - `androidVersion` (string): Minimum Android version, e.g. 8.0. null when it varies with device. - `url` (string): App page on Google Play. - `icon` (string): App icon URL. - `description` (string): Full description (only with includeDescription). - `recentChanges` (string): What's new text (only with includeDescription). ## Input settings - `mode` (string): search: keyword search, one ranked list per term and country. details: app details by package name or Google Play URL. - `terms` (array): Keywords to search, e.g. pdf scanner. Up to 30 terms; terms × countries must be at most 60 searches per run. Each term is searched separately and gets its own rank 1, 2, 3… - `countries` (array): Two-letter Google Play country codes, e.g. us, gb, de, br. Up to 30. Every term (or app ID) is processed in every country; prices, currency, age rating and rank are country-specific. - `language` (string): Language code for texts such as genre, age rating and description, e.g. en, de, pt-BR. Search results also depend on it. - `maxItems` (integer): How many apps to return per search (1–30). Google's search page shows about 30 apps for a term; the run never pads results. - `includeDetails` (boolean): On (default): every search row also gets installs range, ratings count, genre, age rating, version and last update from the app page. Off: faster, search fields only (title, developer, score, price, icon). With details on, terms × countries × results must be at most 400 per run. - `trackAppIds` (array): Optional package names or Google Play URLs to track. Their rows get isTracked = true, and RUN_SUMMARY reports each tracked app's rank per term and country within Google's first ~30 results, or not_in_results. - `appIds` (array): Package names such as com.whatsapp, or URLs such as https://play.google.com/store/apps/details?id=com.whatsapp. Up to 300; app IDs × countries at most 400. An app missing in a country returns a not_found row (not charged). - `includeDescription` (boolean): Adds the full description and What's New text from the app page. Makes rows much larger. ## Step by step on Apify 1. Open the Input tab. 2. Keep Mode = `Search by keywords` (the default). 3. Keep the prefilled Search terms `pdf scanner` and Countries `us`, or add your own. 4. Keep Results per term and country = 20 and click Start. 5. Open the Output tab and the Search results view. Check `rank`, `title`, `installs` and `score`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Keyword rank research | `terms` + `countries` | App row per rank | `term`, `country`, `rank`, `appId`, `title` | Export CSV, compare countries | | Track my app's rank | `terms` + `trackAppIds` | Run summary `rankTracking` | `rank`, `status` (`ranked` / `not_in_results`) | Schedule a daily run | | Competitor snapshot | `mode: details` + `appIds` | App row per app and country | `installs`, `score`, `ratings`, `price`, `updatedAt`, `version` | Google Sheets or API | | Fast keyword scan | `includeDetails: false` | Search row | `rank`, `title`, `developer`, `score`, `price` | Pick apps for a details run | ## Tips - Turn off app page details for a fast keyword scan. - Use package names like com.whatsapp in details mode. - Schedule a daily run to see rank changes. ## Limits - Up to 60 searches (terms × countries) and up to 30 apps per search. - With app page details: up to 400 app pages per run (for example 20 terms × 2 countries × 10 apps). Such a run takes about 3.5 minutes. - Without details: up to 60 × 30 = 1,800 rows, in under a minute. - Details mode: up to 300 app IDs and 400 lookups (app IDs × countries). ## Sample result ```json { "status": "complete", "mode": "search", "term": "pdf scanner", "country": "us", "rank": 2, "appId": "imagetopdf.pdfconverter.jpgtopdf.pdfeditor", "title": "Image to PDF - PDF Maker", "developer": "Simple Design Ltd.", "score": 4.877, "ratings": 2426697, "installs": "50,000,000+", "minInstalls": 50000000, "free": true, "offersIAP": true, "genre": "Productivity", "contentRating": "Everyone", "updatedAt": "2026-09-28T13:34:21.000Z", "version": "1.7.8", "description": null, "detailsIncluded": true, "errorCode": null } ``` ## Use it from code Actor ID: `cliqtomedia/google-play-apps-search` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/google-play-apps-search").call(run_input={ "mode": "search", "terms": [ "pdf scanner" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-play-apps-search/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"mode": "search", "terms": ["pdf scanner"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/google-play-apps-search") result = tool.invoke({"run_input": {"mode": "search", "terms": ["pdf scanner"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Read new reviews, yours and theirs](https://cliqtomedia.com/actors/use-cases/review-monitoring/): Collect reviews from the App Store, Google Play and more. Find what people love and what they hate. ## Similar tools - [App Store Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/app-store-apps-search/) - [Apple App Store Reviews Scraper](https://cliqtomedia.com/actors/apple-app-store-reviews-scraper/) - [Google Play Reviews Scraper](https://cliqtomedia.com/actors/google-play-reviews-scraper/) - [TrustRadius Reviews Scraper](https://cliqtomedia.com/actors/trustradius-reviews-scraper/) - [OpenTable Reviews & Restaurants Scraper, No Login](https://cliqtomedia.com/actors/opentable-reviews-scraper/) - [Trustpilot Reviews Scraper - Ratings & Replies, No Login](https://cliqtomedia.com/actors/trustpilot-reviews-scraper/) --- # Google Play Reviews Scraper > Google Play reviews scraper for written app reviews. Get scores, dates, app versions and developer replies. Choose language and sort. Export CSV. URL: https://cliqtomedia.com/actors/google-play-reviews-scraper/ Category: Reviews & app stores · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/google-play-reviews-scraper?fpr=cliqto Export written Google Play reviews for your apps. Choose language, country, sort order and how many you want. Stable review IDs help you match reviews later. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `com.google.android.apps.translate` in Apps. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Get public written reviews from Google Play. Add an app link or Android package ID. Then choose the review language, Google Play country, sort order, and number of reviews you want. - review text and score; - last update time and app version; - helpful vote count; - developer reply and reply time, when available; - the language, Google Play country, and sort order you chose; - stable review IDs that help you match the same review in later runs. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Saved review | $0.0001 | One saved unique review in the default dataset | | Start fee | $0.0035 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | - One review: about $0.0036. - 1,000 reviews: about $0.10. - Every day 100 reviews, for 30 days: about $0.40 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/google-play-reviews-scraper?fpr=cliqto ## Questions ### Can I export reviews to Excel? Yes. Open the dataset and export to CSV, Excel or JSON. ### Does the country show where the reviewer lives? No. It only changes the store view used. ### Can I get every old review? No. You get the set Google Play returns for your settings. ### Why is a developer reply empty? Not every review has a reply. ### Can I download the results as CSV or Excel? Yes. Open the Dataset, click Export results, and choose JSON, CSV, Excel, or another format supported by Apify. ### Can I get reviews from a specific reviewer country? No. Google Play country changes the store view used for the request. It does not tell you where a reviewer lives. ### Does the Actor get all old reviews? No. It gets the current set that Google Play returns for your language and sort order. Google Play does not provide a public total that proves full history. ### Where can I see why the Actor stopped? Open Run report in the Output tab. The exact record name is `RUN_SUMMARY`. ## Data fields - `schemaVersion` (string) - `itemId` (string) - `reviewId` (string) - `packageId` (string) - `appUrl` (string) - `requestedLanguage` (string) - `requestedCountry` (string) - `sortMode` (string) - `score` (integer) - `text` (string) - `lastModifiedAt` (string) - `thumbsUpCount` (integer) - `appVersion` (string) - `criteria` (array) - `developerReply` (object) - `reviewer` (object) - `observedAt` (string) ## Input settings - `appIds` (array, required): Add 1–20 Android package IDs or Google Play app links. Example: com.spotify.music. The Actor skips repeated apps. - `language` (string): Choose the language of reviews Google Play should return. Use a code such as en, de, or pt-BR. The Actor does not check the language of each review. - `country` (string): Choose the Google Play store view with a two-letter code such as US or DE. This is not the reviewer's country, location, or nationality. - `sort` (string): Choose newest reviews, highest ratings first, or Google Play relevance. Google Play controls relevance order, so it can change. - `maxReviewsPerApp` (integer): Choose how many unique reviews to save for each app. The form starts at 10. The API default is 100. Repeated reviews do not use the limit. - `maxTotalReviews` (integer): Choose how many unique reviews to save across all apps. The form starts at 10. The API default is 1,000. - `includeReviewerProfile` (boolean): Leave this off to exclude reviewer names and profile images. It is off by default and only works when the publisher has enabled it. ## Step by step on Apify 1. Add a Google Play app link or package ID to Apps. 2. Choose the review language and sort order. 3. Set how many reviews you want. 4. Click Start. 5. Open Your review results in the Output tab. 6. Click Export results to download JSON, CSV, or Excel. 7. Google Play can change. Check the run report when an app returns no rows. The required `appIds` field has a UI prefill, but no API default. An API request with `{}` is invalid; it never starts a hidden demo. ## Use cases - Product teams: compare `score`, `text` and `appVersion` after a release. - Support teams: check `developerReply` and its update time. - Analysts: group exported reviews by app and requested language. - Data teams: update records by `itemId` when review content changes. ## Tips - A run can take up to 20 apps and 5,000 reviews per app. - Use the item ID to update reviews that change. - Open the run report to see why a run stopped. ## Limits Maximum scope is 20 apps, 5,000 reviews per app and 20,000 per run. The source returns pages of up to 150 reviews. The Actor uses one request stream, at most two request starts per second, up to three attempts per request, and at most 2 MiB per reviews response. An attempt timeout covers headers and body. Source work ends within 10 minutes even if the platform timeout is larger. A shorter platform timeout reserves 30 seconds for the run report. The standard 300-second demo keeps source work within the remaining 270 seconds. - every review from the full history of an app; - reviews from every language or country setting; - a stable relevance order between runs; - that Google Play will always keep the same data source available; - that the app's public review count will match the number of written reviews this Actor can get. ## Sample result ```json { "itemId": "com.google.android.apps.translate:0d19bfba-aa69-408e-8547-674e0572db26", "reviewId": "0d19bfba-aa69-408e-8547-674e0572db26", "packageId": "com.google.android.apps.translate", "score": 5, "text": "very nicer app", "lastModifiedAt": "2026-10-08T22:41:54.701Z", "appVersion": "10.38.67.991942559.4-release", "developerReply": null, "reviewer": null, "requestedLanguage": "en", "requestedCountry": "US", "sortMode": "newest", "observedAt": "2026-10-10T00:50:15.763Z" } ``` ## Use it from code Actor ID: `cliqtomedia/google-play-reviews-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/google-play-reviews-scraper").call(run_input={ "appIds": [ "com.google.android.apps.translate" ], "language": "en" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-play-reviews-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"appIds": ["com.google.android.apps.translate"], "language": "en"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/google-play-reviews-scraper") result = tool.invoke({"run_input": {"appIds": ["com.google.android.apps.translate"], "language": "en"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Read new reviews, yours and theirs](https://cliqtomedia.com/actors/use-cases/review-monitoring/): Collect reviews from the App Store, Google Play and more. Find what people love and what they hate. ## Similar tools - [Apple App Store Reviews Scraper](https://cliqtomedia.com/actors/apple-app-store-reviews-scraper/) - [TrustRadius Reviews Scraper](https://cliqtomedia.com/actors/trustradius-reviews-scraper/) - [App Store Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/app-store-apps-search/) - [Google Play Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/google-play-apps-search/) - [OpenTable Reviews & Restaurants Scraper, No Login](https://cliqtomedia.com/actors/opentable-reviews-scraper/) - [Trustpilot Reviews Scraper - Ratings & Replies, No Login](https://cliqtomedia.com/actors/trustpilot-reviews-scraper/) --- # Google Scholar Search Scraper > Google Scholar scraper: get title, authors, venue, year, cited-by count and PDF link for your queries. Filter by year. No login or API key. URL: https://cliqtomedia.com/actors/google-scholar-scraper/ Category: Science & research data · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Search Google Scholar and get one row per article. Each row has title, authors, year, snippet and cited-by count. It adds a PDF link when shown. You need no Google login. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `web scraping` in Search queries. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Search Google Scholar with your own queries and get one Dataset row per article: title, link, authors, venue, year, snippet, cited-by count and a direct PDF or HTML link when Scholar shows one. Add a year range, skip [CITATION] entries or sort by date. No Google login, account or API key is needed. ### Good for - Literature review: the top articles on a topic, with authors, venue, year and citation counts in one spreadsheet. - Finding open full texts: `pdfUrl` gives the direct [PDF] or [HTML] link from the right column of Scholar. - Comparing topics or periods: several queries in one run, each with the same year range. - Feeding papers to an AI agent or a RAG pipeline: titles, snippets and links as clean JSON. ### Not a good fit - More than 100 articles per query. Scholar cuts deeper pages for automated traffic; split a big topic into narrower queries or year ranges. - Author profile pages, "Cited by" lists, BibTeX/citation export or full abstracts. The Actor returns the snippet Scholar shows, not the abstract. - Downloading PDFs. The Actor returns links; it does not fetch or store files. - Pages behind a CAPTCHA. The Actor never solves CAPTCHAs. When Scholar blocks every proxy IP, the query gets an `error` row and is not charged. ## Price Prices will be shown after release. ## Questions ### Do I need a Google account or an API key? No. It reads public Scholar pages. You only need an Apify account. ### Why is citedBy or year empty for some rows? Scholar does not show them for every result. Empty means not shown, not zero. ### Can I get every article on a topic? No. It returns up to 100 articles per query. Use narrower queries or year ranges to get more. ### Does it download PDFs? No. It gives you the links only. It does not save files. ### Are the results the same as in my browser? Not always. Scholar answers different IPs and sessions differently: when we ran the same query several times, the order and some of the articles changed between runs. `position` is Scholar's order at the time of the run, so compare by `title` or `url`, not by position. ## Data fields - `query` (string): Your search query. - `position` (integer): Place of the article among the articles returned for this query, continuing across pages (page 2 normally starts at 11). Articles Scholar repeats from earlier pages are skipped, so later positions can move up. Null on not_found/error rows. - `page` (integer): Scholar result page (1 = first page). - `resultId` (string): Scholar's own id of the result (data-cid), stable across runs; useful for de-duplication. - `type` (string): Kind Scholar marks before the title: article (no label), pdf, html, book or citation (known only from reference lists). - `title` (string): Article title. - `url` (string): Link of the title (publisher page or repository). Null for [CITATION] entries without a link. - `authors` (array): Author names as Scholar prints them (initials and surname). Scholar may shorten long lists, see authorsTruncated. - `authorsTruncated` (boolean): True when Scholar cut the author list with "…". - `authorProfiles` (array): Authors with a Google Scholar profile: [{name, profileId, profileUrl}]. - `venue` (string): Journal, conference or book as Scholar prints it; may be shortened with "…". Null when Scholar shows none. - `year` (integer): Publication year from the result line. Null when Scholar shows no year (not 0). - `source` (string): Domain or publisher Scholar shows at the end of the result line, e.g. "nature.com". - `snippet` (string): Text excerpt Scholar shows under the title. - `addedAgo` (string): Only with sortByDate: how long ago Scholar added the article, as Scholar prints it (e.g. "2 days ago"); removed from the snippet. Null otherwise. - `citedBy` (integer): Number from "Cited by N". 0 when Scholar shows the result's link bar without a "Cited by" link (no known citations); null when the link bar is missing. - `citedByUrl` (string): Scholar page listing the citing articles. - `versions` (integer): Number from "All N versions"; 1 when the link bar has no versions link; null when the link bar is missing. - `versionsUrl` (string): Scholar page listing all versions. - `relatedUrl` (string): Scholar "Related articles" search. - `pdfUrl` (string): Direct full-text link from the right column ([PDF] or [HTML]); null when Scholar shows none. - `fullTextType` (string): Label Scholar shows for that link: usually PDF or HTML, sometimes another file type such as PS or DOC. - `searchUrl` (string): Scholar results page this row came from. - `status` (string): complete: an article row. not_found: Scholar found nothing for the query and filters (no article charge; the query event applies). error: the query or a later page failed (free), see statusReason. - `statusReason` (string): Why the row is not_found or error. - `errorCode` (string): Machine-readable error code on error rows, e.g. SOURCE_BLOCKED, DEADLINE_REACHED. - `fetchedAt` (string): When the page was fetched (ISO 8601, UTC). ## Input settings - `queries` (array, required): What to search on Google Scholar, one query per line, e.g. "web scraping". Scholar operators such as author:"J Smith", source:Nature or "exact phrase" work. Up to 200 queries; duplicates are removed. - `maxResults` (integer): How many articles to return for each query, up to 100 (Scholar shows 10 per page). You pay per article returned plus a small fee per answered query. Stops earlier when Scholar has no more results. Need more on one topic? Add narrower queries or split by year range. - `yearFrom` (integer): Only articles published in this year or later (Scholar's "Since" / custom range filter). Leave empty for any year. - `yearTo` (integer): Only articles published in this year or earlier. Leave empty for any year. - `includeCitations` (boolean): Keep [CITATION] entries (works Scholar knows only from other papers' reference lists, without an online copy). Turn off to get only results with a link. - `sortByDate` (boolean): Newest first, as Scholar's "Sort by date" does: Scholar then shows only articles added in the last year, so year filters and totals differ. Default: sort by relevance. - `proxyConfiguration` (object): Apify datacenter proxy by default. A page Scholar refuses or shortens on datacenter IPs is retried through Apify residential proxy (US). Choose your own proxy group or URLs to turn this off. The Actor never solves CAPTCHAs. ## Step by step on Apify 1. Open the Input tab. The form is prefilled with the query `web scraping` and Max results per query = 10. 2. Click Start. 3. Open the Results view in the Dataset. Check `title`, `authors`, `year`, `citedBy` and `pdfUrl`. 4. Open the `RUN_SUMMARY` record in the Key-value store to see the run status and counts. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Top papers on a topic | `queries` + `maxResults` | Article | `title`, `authors`, `year`, `citedBy` | Export CSV or Excel | | Papers from a fixed period | `yearFrom` + `yearTo` | Article | `year`, `venue`, `url` | Screening spreadsheet | | Open full texts | `includeCitations: false` | Article | `pdfUrl`, `fullTextType`, `source` | Download with your own tool | | Newest papers | `sortByDate: true` | Article | `addedAgo`, `title`, `url` | Read via API | | Papers by one author or journal | `queries` with `author:` or `source:` | Article | `authorProfiles`, `venue`, `citedBy` | Join on `resultId` | ## Tips - Use a year range to focus on new papers. - Use narrow queries or year ranges to get more than 100 articles. - Use the pdfUrl field to find open full texts fast. ## Limits This Actor is independent of Google. It reads public Google Scholar results pages, the same pages you see in a browser without login. Articles belong to their authors and publishers; check their terms before you reuse texts or PDFs. - Up to 200 queries per run and 100 articles per query. In our tests 200 queries × 1 article took about 9 minutes with a 600-second timeout, so raise the timeout for big lists. - Speed: a 10-article run usually takes under 10 seconds. In our tests 3 queries × 50 articles took about 30 seconds, and 5 queries × 100 articles took 2–3 minutes at 256 MB. - Deep pages: Scholar often repeats or empties pages after about 70 articles of one query. In our tests 1–2 of 5 queries × 100 ended with a free `error` row after 72–92 articles; the other queries reached 100. - The default run timeout is 300 seconds. The Actor stops source work 15 seconds before the timeout and keeps what it has: the run ends SUCCEEDED with status `CAPPED` and reason `DEADLINE`. For many queries, raise the timeout in the run options. - Default memory is 256 MB; more memory does not add results. - Results are in English Scholar (`hl=en`) with Scholar's default search scope (articles, no patents). ## Sample result ```json { "query": "web scraping", "position": 1, "page": 1, "resultId": "vzUZDE4wNWMJ", "type": "pdf", "title": "Web scraping or web crawling: State of art, techniques, approaches and application.", "url": "http://i-csrs.org/Volumes/ijasca/2021.3.11.pdf", "authors": ["Author One"], "authorsTruncated": false, "authorProfiles": [ { "name": "Author One", "profileId": "AUTHOR_ID_1", "profileUrl": "https://scholar.google.com/citations?user=AUTHOR_ID_1&hl=en" } ], "venue": "International Journal of Advances in Soft Computing & …", "year": 2021, "source": "i-csrs.org", "snippet": "… are required to implement web scrapping properly such as … into what web scraping is, how it works, web scraping stages, …", "addedAgo": null, "citedBy": 679, "versions": 4, "pdfUrl": "http://i-csrs.org/Volumes/ijasca/2021.3.11.pdf", "fullTextType": "PDF", "searchUrl": "https://scholar.google.com/scholar?q=web+scraping&hl=en&as_sdt=0%2C5", "status": "complete", "statusReason": null, "errorCode": null, "fetchedAt": "2026-10-17T12:32:46.110Z" } ``` ## Similar tools - [DOI Metadata & Bibliography Enrichment](https://cliqtomedia.com/actors/doi-bibliography-enrichment/) - [Google Patent Details Scraper](https://cliqtomedia.com/actors/google-patents-scraper/) - [ClinicalTrials.gov Studies Search & Monitor](https://cliqtomedia.com/actors/clinicaltrials-gov-studies-monitor/) - [DataCite Research Dataset Search](https://cliqtomedia.com/actors/datacite-dataset-search/) - [Europe PMC Literature Search & Monitor](https://cliqtomedia.com/actors/europe-pmc-literature-search/) - [GBIF Biodiversity Occurrence Search](https://cliqtomedia.com/actors/gbif-occurrence-search/) --- # Google Search Results Scraper (SERP) > Google search results scraper: get organic positions, titles, URLs, snippets, dates and related searches by country and language. No login, pay per page. URL: https://cliqtomedia.com/actors/google-search-scraper/ Category: Search, SEO & ads · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/google-search-scraper?fpr=cliqto Add keywords and get Google results as rows. You get organic results with their positions and related searches. You pay per loaded results page. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `apify web scraping` in Search queries. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Add search queries, pick a Google country and language, and get the public Google search results (SERP) as one row per result: organic results and related searches, each with its position. No Google login, no API key; you pay per loaded results page, about $0.006 for the first page of one query. - organic results: position, title, URL, displayed URL, snippet, date and sitelinks (when Google shows them); - related searches: the "People also search for" list, once per query. ### Good for - Track where a site ranks for a list of keywords in one country. - Collect top 10–100 URLs for a topic for SEO or content research. - See which shops and brands rank for product queries. - Find related searches to grow a keyword list. ### Not a good fit - The Actor reads Google's simple HTML results page. It does not return ads, shopping prices, People Also Ask, AI Overviews, featured snippets, maps or image packs. - Results are not personalised and not tied to a city. A Google Ads account, Search Console data or search volume are not included. - Google sometimes blocks automated traffic. The Actor changes IP addresses and retries, but it never solves CAPTCHAs (see Troubleshooting). ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.004 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Results page | $0.002 (from $0.0015 on paid Apify plans) | Charged once for each Google results page loaded for a query (about 10 organic results plus ads and related searches). A query with no results costs one page. Error rows are free. | - One result: about $0.006. - 1,000 results: about $2.00. - Every day 100 results, for 30 days: about $6.12 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/google-search-scraper?fpr=cliqto ## Questions ### Does it return People Also Ask or AI Overviews? No. It reads the simple Google results page. It gives organic results and related searches. Ads, sitelinks and shopping prices are not included. ### How deep can it go? Up to 10 result pages per query and up to 500 queries per run. ### Are results personalised or local to a city? No. Results are for the chosen country and language only. ### Do I need a Google account or API key? No. The Actor reads public results pages without login or cookies of any account. ### How many results do I get per page? Usually 9–10 organic results and 8–10 related searches, depending on the query. ### Is the order the same as on google.com? `position` follows the order on the simple Google results page for the chosen country and language. It can differ a little from a personalised desktop page. ### What does `null` mean? Google did not show that value, for example no date. It is not zero and not an error. ## Data fields - `query` (string): Your search query. - `page` (integer): Google result page (1 = first page). - `type` (string): organic result or related search (ad is reserved and not written today); null on not_found/error rows. - `position` (integer): Place among rows of the same type for this query; organic positions continue across pages (page 2 starts at 11 when page 1 had 10). - `title` (string): Result title or the related search text. - `url` (string): Result URL. For related: Google search URL. Null when Google hid an organic link and did not reveal it (see statusReason). - `displayedUrl` (string): Site as Google shows it (domain and breadcrumb). - `description` (string): Snippet text. - `date` (string): Date shown before the snippet, as Google prints it (e.g. "Oct 2, 2026", "3 days ago"). - `sitelinks` (array): Links Google shows under a result, as [{title, url}]. They are not separate rows and do not change position. An empty list when Google shows none. - `price` (string): Always null: the simple Google results page shows no prices. - `countryCode` (string): Google country used (gl). - `languageCode` (string): Google language used (hl). - `searchUrl` (string): Google results page that was scraped. - `status` (string): complete = a result; not_found = Google returned no results for the query; error = the query could not be scraped. A not_found row is one charged page (Google was queried); error rows are free. - `statusReason` (string): Plain-English reason for not_found/error rows, or a note on a result (e.g. hidden URL). - `errorCode` (string): Machine code for error rows, e.g. SOURCE_BLOCKED, DEADLINE_REACHED. - `fetchedAt` (string): When the page was scraped (ISO 8601). ## Input settings - `queries` (array, required): What to search on Google, one query per line, e.g. "best running shoes". Google operators such as site:example.com or "exact phrase" work. Up to 500 queries; duplicates are removed. - `countryCode` (string): Google country (gl parameter): results are ranked for this country. Default: United States. - `languageCode` (string): Google interface language (hl parameter). It changes labels and slightly the ranking; results in other languages can still appear. Default: English. - `maxPagesPerQuery` (integer): How many Google result pages to scrape for each query (usually 9–10 organic results per page). Each loaded page is one charged page (a query with no results costs one page). Stops earlier when Google has no next page. - `includeAds` (boolean): Kept for compatibility. Google's simple results page shows no ads, so this option adds no rows today. Only loaded pages are charged. - `includeRelated` (boolean): Add rows for "People also search for" / related searches, once per query. - `proxyConfiguration` (object): Apify datacenter proxy by default. A page that Google refuses on several datacenter IPs is retried through Apify residential proxy in the chosen country. Choose your own proxy group or URLs to turn this off. The Actor never solves CAPTCHAs. ## Step by step on Apify 1. Open the Input tab. 2. In Search queries (`queries`), keep the prefilled `apify web scraping` or add your own queries, one per line. 3. Keep Country `us` and Language `en` (defaults), or choose others. 4. Keep Pages per query (`maxPagesPerQuery`) at `1` (prefill), or set up to `10`. 5. Click Start. 6. Open the Output tab (Dataset) and check `type`, `position`, `title` and `url`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Rank tracking | `queries`, `countryCode`, `maxPagesPerQuery` | organic row | `query`, `position`, `url`, `page` | Schedule + Google Sheets or API | | SEO content research | `queries`, `languageCode` | organic row | `title`, `description`, `displayedUrl`, `date` | Export CSV / JSON | | Shop and brand check | `queries`, `countryCode` | organic row | `title`, `url`, `displayedUrl`, `description` | Export to spreadsheet | | Keyword ideas | `queries`, `includeRelated` | related row | `title`, `url` | Feed back into `queries` | ## Tips - Use related searches as new keywords for your next run. - Ask for fewer pages if you only need the top 10. - Set a maximum charge per run to control cost. ## Limits - A query with no results costs one page: Google was asked and answered. - `error` rows (Google refused the page) are free. - If you set a maximum charge for the run, the Actor stops before it, keeps the rows and ends with status CAPPED. - Up to 500 queries and 10 pages per query in one run. - Run time depends on Google's answers: in the latest test, 40 pages took about 7 seconds without blocks. Very large runs were not measured on the current route, so start with a smaller list. After 3,600 seconds the run stops with status CAPPED and keeps all rows; split bigger lists across runs. - Google decides how many pages a query has; some queries end before page 10. ## Sample result ```json { "query": "coffee machine", "page": 1, "type": "organic", "position": 1, "title": "Coffee & Espresso Makers | Macy's", "url": "https://www.macys.com/shop/home/kitchen-dining/kitchen/coffee-espresso-makers?id=24732", "displayedUrl": "www.macys.com › Home › Kitchen & Dining › All Kitchen", "description": "Shop coffee makers at Macy's with stylish, high-quality ...", "date": "Oct 9, 2026", "sitelinks": [], "price": null, "countryCode": "us", "languageCode": "en", "searchUrl": "https://www.google.com/search?q=coffee+machine&hl=en&gl=us", "status": "complete", "statusReason": null, "errorCode": null, "fetchedAt": "2026-10-22T04:06:02.872Z" } ``` ## Use it from code Actor ID: `cliqtomedia/google-search-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/google-search-scraper").call(run_input={ "queries": [ "apify web scraping" ], "countryCode": "us" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-search-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"queries": ["apify web scraping"], "countryCode": "us"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/google-search-scraper") result = tool.invoke({"run_input": {"queries": ["apify web scraping"], "countryCode": "us"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/): See what your competitors launch, hire, change and advertise. Every week, without opening their sites. - [SEO data without a big suite](https://cliqtomedia.com/actors/use-cases/seo-research/): Collect keyword ideas and check your pages and your rivals' pages. Search results and trends coming soon. ## Similar tools - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) - [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/) - [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/) - [Website Screenshot & PDF Generator: Full Page & Mobile](https://cliqtomedia.com/actors/website-screenshot-pdf/) - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) - [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/) --- # Google Shopping Scraper: Prices, Stores and Offers > Google Shopping scraper: product title, price, store, rating and reviews for your searches. Add offers to see each store's price. Pick a country. URL: https://cliqtomedia.com/actors/google-shopping-scraper/ Category: E-commerce & prices · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Add product searches and pick a country. You get Google Shopping results as one row per product. Turn on offers to see the price of each store. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `wireless earbuds` in Product searches. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Add product searches, pick a country, and get Google Shopping results as one row per product: title, price as a number with currency, store, rating, reviews and the Google product link. Turn on offers to get the price of every store that sells the product. - product card: position, title, price (number), price text, old price, currency (ISO code), store, "& more stores" flag, rating, number of reviews, delivery and returns notes, condition, Google product IDs and the Google product page link; - offers (optional): for each product, the list of stores from the Google product page, with price, currency, availability, store rating, delivery, returns and a link. ### Good for - Check prices of your products and competitors in one country. - See which stores sell a product and for how much. - Collect product lists for a category or keyword with ratings and reviews. - Watch price changes with a daily or weekly schedule. ### Not a good fit - One Google Shopping page per search: up to 60 products. Google does not give more pages in this format. - No sorting or price filters: Google ignores them for this kind of request. - No product images: Google puts small images inside the page code, not as links. - Rating and reviews are as shown on the Google product card. For some products Google shows the rating of one store listing, so it can differ from other sites. - The local-currency check covers 61 countries. In other countries results are saved as Google shows them. - Store links in offers are Google redirect links (`google.com/goto?...`), not direct store URLs. - In the EU (for example France), Google often does not open the product page. Products are still saved, but their offers are `null` and the row status is `partial` (see Troubleshooting). ## Price Prices will be shown after release. ## Questions ### Do I need a Google account? No. No Google login or API key is needed. ### How many products per search? Up to 60, the size of one Google Shopping page. ### Can I sort or filter by price? No. Google ignores these for this kind of request. ### Are store links direct? No. Store links in offers are Google redirect links. ### Which countries work? You can choose any country from the list, but Google Shopping does not work in every country. Tests used the US, UK, Germany, Canada, France and Australia. In 61 countries (for example the US, UK, Canada, Australia, the euro area, Japan, India and Brazil) the Actor checks that prices are in the local currency; if Google answers for another country, it tries again from a new IP address. In other countries it saves the results as Google shows them and writes `COUNTRY_NOT_CHECKED` in the `RUN_SUMMARY` warnings. ### Why is `price` a number? So you can sort and compare. The price as shown is in `priceText`, and the currency code is in `currency`. ### What does `null` mean? Google did not show that value, for example no rating or no old price. It is not zero and not an error. ## Data fields - `query` (string): Your product search. - `position` (integer): Place of the product on the Google Shopping page (1 = first); null on not_found/error rows. - `title` (string): Product name as Google shows it. - `price` (number): Price as a number in the listed currency, e.g. 299. Null when Google shows no price. - `priceText` (string): Price exactly as shown, e.g. "$299.00" or "24,90 €". - `oldPrice` (number): Earlier price when Google shows a discount ("was $90"); null otherwise. - `currency` (string): ISO currency code from the price symbol and country, e.g. USD, EUR; null when it is not clear. - `condition` (string): Condition label when Google shows one ("Used", "Refurbished"); null for new items. - `merchant` (string): Store that Google shows on the card. - `moreMerchants` (boolean): True when the card says "& more": other stores also sell this product. - `rating` (number): Product rating 0–5; null when Google shows none. - `reviewsCount` (integer): Number of product reviews (as rounded as Google shows it, e.g. "3K" = 3000); null when none. - `delivery` (string): Delivery text, e.g. "Free delivery by Mon". - `returns` (string): Returns text, e.g. "30-day returns". - `productUrl` (string): Google Shopping product page with the stores that sell it. - `offers` (array): Stores selling the product (only with "Include offers"): merchant, price, availability, delivery, returns, store rating, Google link to the store page. Null when not requested or not loaded; [] when Google lists no offers. - `offersCount` (integer): Number of offers loaded; null when offers were not loaded. - `ids` (object): Google product ids: catalogId, gpcId, offerDocId, productDocId (any may be null). - `countryCode` (string): Google country used (gl). - `languageCode` (string): Google language used (hl). - `searchUrl` (string): Google Shopping page that was scraped. - `status` (string): complete = a product; partial = a product whose store offers could not be loaded (no offers charge); not_found = Google Shopping returned no products for the search; error = the search could not be scraped. not_found and error rows add no product charge; a not_found search still counts as one loaded search page. - `statusReason` (string): Plain-English reason for partial/not_found/error rows, or a note on a product. - `errorCode` (string): Machine code, e.g. SOURCE_BLOCKED, DEADLINE_REACHED. - `fetchedAt` (string): When the page was scraped (ISO 8601). ## Input settings - `queries` (array, required): What to search on Google Shopping, one per line, e.g. "wireless earbuds" or "iphone 17 pro 256gb". Up to 200 searches; duplicates are removed. - `countryCode` (string): Google Shopping country (gl parameter): products, stores and prices for buyers in this country. In 61 countries (for example the US, UK, Canada, Australia, the euro area, Japan, India, Brazil) prices are checked against the local currency and a page answered for another country is asked again; in other countries results are saved as Google shows them. Google Shopping is not available in every country; then the query returns a not_found row. Default: United States. - `languageCode` (string): Google interface language (hl parameter). It changes labels such as delivery and returns texts; prices stay in the local currency. Default: English. - `maxItems` (integer): How many products to save for each search, in Google's order. Google Shopping shows one page of about 40–60 products per search and has no further pages, so a search can return fewer. - `includeOffers` (boolean): Open each product and add the stores that sell it (store, price, availability, delivery, returns, store rating, link). Adds one event per product with at least one store. Slower: about 5 seconds per product on average (product pages open 5 at a time). ## Step by step on Apify 1. Open the Input tab. 2. In Product searches (`queries`), keep the prefilled `wireless earbuds` or add your own phrases, one per line. 3. Keep Country `us` (default) or choose another country. 4. Keep Products per search (`maxItems`) at `10` (prefill), or set up to `60`. 5. Click Start. 6. Open the Output tab and check `title`, `price`, `currency`, `merchant` and `rating`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Price monitoring | `queries` (product names or models), `countryCode` | product row | `price`, `currency`, `merchant`, `oldPrice` | Schedule + Google Sheets or API | | Store comparison | `queries`, `includeOffers: true` | product row with `offers` | `offers[].merchant`, `offers[].price`, `offers[].availability` | Export JSON / Excel | | Category research | `queries` (category words), `maxItems: 60` | product row | `title`, `rating`, `reviewsCount`, `position` | Export CSV | | Country check | same `queries`, different `countryCode` | product row | `price`, `currency`, `countryCode` | Compare in a spreadsheet | ## Tips - Turn on offers only when you need store prices. It adds about 5 seconds per product. - Run the same searches on a schedule to track price changes. - Raise the timeout for big runs. For 200 searches, set about 1,200 seconds. ## Limits - A phrase with no products costs one search page: Google was asked and answered. - `error` rows are free. Products with `partial` status (offers not loaded) are charged as a product, not as offers. - If you set a maximum charge for the run, the Actor stops before it, keeps the rows and ends with status CAPPED. - Up to 200 phrases and 60 products per phrase in one run. A test with 200 phrases and 60 products each (about 10,000 rows) took about 14 minutes. - The default timeout is 300 seconds: enough for about 30 phrases without offers (in tests, 10 US phrases took about 60 seconds and 50 German phrases about 160 seconds), or about 50 products with offers. For bigger runs set a longer timeout (for 200 phrases, 1,200 seconds). At the time limit the run stops with status CAPPED and keeps all rows. - With offers on, each product needs one more Google page, about 5 seconds per product. ## Sample result ```json { "query": "wireless earbuds", "position": 1, "title": "JLab Go Air Pop True Wireless Earbuds", "price": 17.99, "priceText": "$17.99", "oldPrice": 27, "currency": "USD", "condition": null, "merchant": "Best Buy", "moreMerchants": true, "rating": 4.3, "reviewsCount": 33000, "delivery": "Free delivery", "returns": null, "productUrl": "https://www.google.com/search?q=JLab+Go+Air+Pop+True+Wireless+Earbuds&udm=28&ibp=oshop&prds=catalogid%3A8372463217625314514%2Cgpcid%3A9146411353573113826%2CheadlineOfferDocid%3A452194635528668653%2CproductDocid%3A10114522055954158630&gl=us&hl=en&uule=w+CAIQICINVW5pdGVkIFN0YXRlcw", "offers": null, "offersCount": null, "ids": { "catalogId": "8372463217625314514", "gpcId": "9146411353573113826", "offerDocId": "452194635528668653", "productDocId": "10114522055954158630" }, "countryCode": "us", "languageCode": "en", "searchUrl": "https://www.google.com/search?q=wireless+earbuds&tbm=shop&hl=en&gl=us&uule=w+CAIQICINVW5pdGVkIFN0YXRlcw", "status": "complete", "statusReason": null, "errorCode": null, "fetchedAt": "2026-10-15T05:53:19.024Z" } ``` ## Use cases with this tool - [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/): Track prices and offers in shops and marketplaces. See changes before your customers do. ## Similar tools - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) - [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/) - [Website Screenshot & PDF Generator: Full Page & Mobile](https://cliqtomedia.com/actors/website-screenshot-pdf/) - [AliExpress Scraper: Products, Prices & Reviews, No Login](https://cliqtomedia.com/actors/aliexpress-scraper/) - [Coles, Woolworths & Aldi Price Scraper - No Login](https://cliqtomedia.com/actors/au-supermarket-prices/) --- # Google Trends Scraper > Google Trends scraper: get interest over time, interest by region and related queries for up to 50 keywords. Compare 5 terms. Export to CSV or Excel. URL: https://cliqtomedia.com/actors/google-trends-scraper/ Category: Search, SEO & ads · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/google-trends-scraper?fpr=cliqto Get Google Trends data for many keywords in one run. You get interest over time, by region and related queries. Open it as a table or export it. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `web scraping` in Search terms. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Google Trends Scraper gets [Google Trends](https://trends.google.com/trends/) data for your keywords: interest over time, interest by country, region, metro or city, and related queries and topics. Add one or more search terms, pick a location and a time range, and the Actor returns clean rows that you can open as a table, export to CSV or Excel, or read with the API. - Interest over time: one row per time point with a value from 0 to 100 (100 = the highest interest in the chosen period and place). - Interest by region: one row per country, region, US metro area or city that has data. - Related queries: top and rising searches that people also made. - Related topics: top and rising topics, only when Google sends them. - Summary: one row per term with its status, average interest and row counts. ### Good for - Check how interest in a product, brand or topic changes over months or years. - Find the countries or US states where a term is most popular. - Collect rising queries for content and SEO ideas. - Compare up to 5 brands or keywords on one scale. ### Not a good fit - Google Trends shows relative interest (0–100), not the number of searches. It is not a keyword volume tool. - It does not collect "Trending now" daily trends or real-time trending stories. - Google gives no region data for some terms and filters (for example many terms at city level). The Actor then returns the other sections and explains it in a warning. - Related topics: in our tests in October 2026, Google sent empty topic lists for most terms. The Actor returns topics only when Google sends them. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.01 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Data row | $0.00005 (from $0.000043 on paid Apify plans) | Charged for each data row of a keyword with data: one point of interest over time, one region, or one related query or topic. The same count applies in grouped output. Per-keyword summary rows and keywords without enough search data or with an error are free. | - One result: about $0.01. - 1,000 results: about $0.06. - Every day 100 results, for 30 days: about $0.45 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/google-trends-scraper?fpr=cliqto ## Questions ### Does Google Trends show the number of searches? No. It shows interest from 0 to 100. 100 is the top point for that term, place and time. ### Why are numbers a bit different each day? Google Trends uses a sample of searches. Small changes between runs are normal. ### Does it get daily trending searches? No. It does not collect Trending now lists or trending stories. ### How many keywords can I check? Up to 50 terms per run. 50 terms took about 110 seconds in tests. ### Do I need a Google account or an API key? No. The Actor reads public Google Trends data without login. ### Is this the number of searches? No. Google Trends gives relative interest from 0 to 100. 100 is the highest point for the chosen term, place and period. It does not show search volume. ### Why are the numbers a little different from yesterday? Google Trends uses a sample of searches and rescales each query. Small changes between runs are normal, mostly for small terms and short periods. ### Why are there no related topics? Google sends related topics only for single terms (not for comparisons), and in our tests in October 2026 the topic lists were often empty. The Actor returns topics only when Google sends them. ### Why does a small country have 100? Region values are the share of all searches in that place, not the number of searches. A small country with few searches can get 100. This is how Google Trends shows it; the Actor does not change values. Rising values like `23350` (+23,350%) and "Breakout" also come from Google. ### How fresh is the data? Each run asks Google Trends at the time of the run. The latest time point is often not finished yet (`isPartial` `true`). ## Data fields - `recordType` (string): What the row holds: a time point, a region, a related query or topic, the per-term summary (rows format) or one whole term (grouped format). - `searchTerm` (string): The search term the row belongs to. - `comparisonGroup` (string): All compared terms joined by " | " when "Compare terms" is on; otherwise null. - `geo` (string): Location code, or WORLDWIDE. - `timeRange` (string): Time range sent to Google, e.g. "today 12-m" or "2024-01-01 2024-06-30". - `categoryId` (integer): Google Trends category id (0 = all categories). - `searchType` (string): web, images, news, shopping or youtube. - `exploreUrl` (string): The same query in the Google Trends UI. - `sourceUrl` (string): Google Trends API endpoint the data came from. - `fetchedAt` (string): When the data was fetched (ISO 8601, UTC). - `date` (string): Start of the time point (ISO 8601, UTC). - `formattedTime` (string): Time point label as Google shows it. - `value` (integer): Interest 0–100 (time point or region) or related-item score; null when Google has no data — never 0 in place of missing. - `hasData` (boolean): False when Google has no data for this time point. - `isPartial` (boolean): True for the latest, still incomplete time point. - `geoCode` (string): Region code (e.g. US-CA, or the metro number). - `geoName` (string): Region name. - `formattedValue` (string): Value as Google shows it, e.g. "<1", "+250%" or "Breakout". - `comparisonShare` (integer): Comparison only: the term's share (%) of searches among the compared terms in this region. - `latitude` (number): City level only: latitude. - `longitude` (number): City level only: longitude. - `regionResolution` (string): Region level of the region rows: COUNTRY, REGION, DMA or CITY. - `rankType` (string): top = most searched with the term; rising = biggest growth. - `query` (string): Related query text. - `topicTitle` (string): Related topic name. - `topicType` (string): Related topic type, e.g. "Programming language". - `topicMid` (string): Google Knowledge Graph id of the topic. - `isBreakout` (boolean): True when Google marks the rising item as Breakout (growth over 5000%). - `link` (string): Google Trends link for the related item. - `status` (string): Term result: complete, partial (some sections missing), not_found (not enough search data) or error. Only data rows of complete and partial terms are charged. - `statusReason` (string): Why a term is partial, not_found or error. - `errorCode` (string): Machine-readable error code for partial and error terms. - `average` (integer): Average interest over the period (null when unknown). - `timelinePoints` (integer): Number of time points received for the term. - `regionRows` (integer): Region rows written for the term. - `relatedQueryRows` (integer): Related query rows written for the term. - `relatedTopicRows` (integer): Related topic rows written for the term. - `interestOverTime` (array): Grouped format: time points. - `interestByRegion` (array): Grouped format: regions with data. - `relatedQueriesTop` (array): Grouped format: top related queries. ## Input settings - `searchTerms` (array, required): Keywords or phrases to look up, e.g. web scraping. Each term is a separate Google Trends query unless "Compare terms" is on. Up to 50 terms per run; duplicates are removed. - `compareTerms` (boolean): Put all terms (2–5) into one Google Trends comparison, like typing them side by side in the Google Trends UI. Values are then relative to the most popular term, and regions get each term's share of searches. - `geo` (string): Google Trends location code: a country (US, GB, DE), a region (US-CA, DE-BY) or a US metro (US-NY-501). Leave empty for worldwide. - `timeRange` (string): Period of the data. Short periods have hourly or minute points, long ones weekly or monthly points. Ignored when a custom time range is set. - `customTimeRange` (string): Exact dates instead of the time range above: start and end date separated by a space, e.g. 2024-01-01 2024-06-30. Data starts on 2004-01-01. - `category` (string): Limit the data to searches in one Google Trends category. - `categoryId` (integer): Any Google Trends category id, including subcategories (e.g. 1227 for Android OS). Overrides "Category" when set. - `searchType` (string): Which Google search to measure, as in the Google Trends UI. - `includeTimeline` (boolean): One row per time point with the 0–100 interest value. - `includeRegions` (boolean): One row per country, region, metro or city with data. - `regionResolution` (string): Auto = countries for worldwide, subregions for a country (Google default). Metro (DMA) works for US locations only; country level only worldwide. - `includeLowVolumeRegions` (boolean): Off (default) hides regions with too few searches, which otherwise often show a misleading 100. Same switch as in the Google Trends UI. - `includeRelated` (boolean): Top and rising related queries, plus related topics (Google gives topics only for single terms, not for comparisons). - `outputFormat` (string): Rows: one flat row per data point (best for spreadsheets). Grouped: one item per term with nested lists. - `proxyConfiguration` (object): Apify Proxy is used by default and switches to residential IPs on its own if Google starts refusing requests. Change only if you know you need to. ## Step by step on Apify 1. Open the Input tab. 2. Keep the prefilled term `web scraping` in Search terms, or add your own terms (up to 50). 3. Keep Time range at Past 12 months, or choose another period. Leave Location empty for worldwide data. 4. Click Start. 5. Open the Output tab. Every row has a `recordType` column: `interest_over_time`, `interest_by_region`, `related_query`, `related_topic` or `term_summary`. Sort or filter by this column, or export and filter in a spreadsheet. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Seasonality of a product | `searchTerms`, `timeRange` `today 5-y` | time rows | `date`, `value`, `isPartial` | chart in Google Sheets or BI | | Where to launch | `searchTerms`, `regionResolution` | region rows | `geoName`, `geoCode`, `value` | map or market list | | Content and SEO ideas | `searchTerms`, `includeRelated` | related query rows | `query`, `rankType`, `value`, `isBreakout` | keyword list | | Brand comparison | `searchTerms` (2–5) + `compareTerms` | time and region rows | `value`, `comparisonShare`, `comparisonGroup` | dashboard | | News and YouTube interest | `searchType` `news` or `youtube` | time rows | `date`, `value` | report | ## Tips - Use the compare option to put up to 5 terms on one scale. - Do not compare values from separate queries; they use different scales. - Use a long time range for small terms; short ones jump more. ## Limits - Up to 50 terms per run. 50 terms took about 110 seconds in our tests. - Up to 5 terms in one comparison (Google Trends limit). - Values are relative (0–100) inside one query. Values of terms from separate queries are not on the same scale; use `compareTerms` for that. - A run works for up to about 4.5 minutes with the default 300-second timeout. If it has more terms, it stops with the rows it has and `RUN_SUMMARY` shows `CAPPED` with `DEADLINE`. - A `partial` term is charged for the rows it has. `statusReason` tells you which section is missing. - If Google refuses many requests, the Actor first switches to new connections and then to residential proxies. If Google still refuses, the run stops; terms that were not done get free `error` rows. ## Sample result ```json [ { "recordType": "interest_over_time", "searchTerm": "web scraping", "date": "2025-10-12T00:00:00.000Z", "formattedTime": "Oct 12 – 18, 2025", "value": 56, "hasData": true, "isPartial": false }, { "recordType": "interest_by_region", "searchTerm": "web scraping", "geoCode": "US", "geoName": "United States", "value": 50, "formattedValue": "50", "comparisonShare": null, "latitude": null, "longitude": null, "regionResolution": "COUNTRY" }, { "recordType": "related_query", "searchTerm": "web scraping", "rankType": "top", "query": "web data scraping", "value": 100, "formattedValue": "100", "isBreakout": false, "link": "https://trends.google.com/trends/explore?q=web+data+scraping&date=today+12-m" }, { "recordType": "term_summary", "searchTerm": "web scraping", "exploreUrl": "https://trends.google.com/trends/explore?date=today+12-m&q=web+scraping&hl=en-US", "status": "complete", "statusReason": null, "errorCode": null, "average": 58, "timelinePoints": 53, "regionRows": 65, "relatedQueryRows": 45, "relatedTopicRows": 0 } ] ``` ## Use it from code Actor ID: `cliqtomedia/google-trends-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/google-trends-scraper").call(run_input={ "searchTerms": [ "web scraping" ], "compareTerms": False }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-trends-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"searchTerms": ["web scraping"], "compareTerms": false}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/google-trends-scraper") result = tool.invoke({"run_input": {"searchTerms": ["web scraping"], "compareTerms": False}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [SEO data without a big suite](https://cliqtomedia.com/actors/use-cases/seo-research/): Collect keyword ideas and check your pages and your rivals' pages. Search results and trends coming soon. ## Similar tools - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) - [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/) - [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/) - [Google Ads Transparency Scraper - Ad Text, No Login](https://cliqtomedia.com/actors/google-ads-transparency-scraper/) - [Google Images Scraper - Image URLs, Sizes & Source Pages](https://cliqtomedia.com/actors/google-images-scraper/) --- # Greenhouse jobs scraper and job change monitor > Greenhouse jobs scraper for boards you know. Export open jobs, get one job's details, or compare snapshots to see new, updated and removed jobs. URL: https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/ Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/greenhouse-jobs-monitor-scraper?fpr=cliqto Add the Greenhouse boards of companies you follow. Get their open jobs as clean rows. Run it again later and see which jobs are new, updated or gone. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `snapshot` in Mode. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Scrape public jobs from Greenhouse boards you already know. Export a current snapshot, fetch exact job details, or compare two snapshots to find changes. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Greenhouse job result | $0.00024 (from $0.00019 on paid Apify plans) | One useful Greenhouse job or verified monitoring change saved to Dataset. | | Start fee | $0.0014 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | - One job: about $0.0016. - 1,000 jobs: about $0.24. - Every day 100 jobs, for 30 days: about $0.76 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/greenhouse-jobs-monitor-scraper?fpr=cliqto ## Questions ### Do I need a Greenhouse account or API key? No. The tool uses the public Greenhouse job board endpoints. It never sends job applications. ### Can it find every company that uses Greenhouse? No. You must know the board token or board URL of each company. ### How do I see only new or removed jobs? Use monitor mode. Give it the snapshot store ID from an earlier run. ### Does it work with EU Greenhouse boards? Yes. It accepts US and EU Greenhouse board URLs and plain board tokens. ## Data fields - `schemaVersion` (integer) - `recordType` (string) - `stableId` (string) - `boardToken` (string) - `boardRegion` (string) - `jobId` (string) - `internalJobId` (string) - `requisitionId` (string) - `title` (string) - `location` (object) - `departments` (array) - `offices` (array) - `metadata` (array) - `language` (string) - `absoluteUrl` (string) - `greenhouseUrl` (string) - `firstPublishedAt` (string) - `updatedAt` (string) - `contentHtml` (string) - `contentText` (string) - `questions` (object) - `payRanges` (array) - `retrievedAt` (string) - `changeStatus` (string) - `matchTransition` (string) - `changedFields` (array) - `previousHash` (string) - `currentHash` (string) - `observedRemovedAt` (string) - `sourceEvidence` (object) ## Input settings - `mode` (string, required): Snapshot lists current jobs; details fetches exact board/job pairs; monitor compares an explicit prior KVS snapshot. - `boards` (array): For snapshot/monitor. Accepts up to 100 tokens or current/legacy US/EU Greenhouse board URLs. - `jobs` (array): For details mode. Use token/numeric-ID or an allowed Greenhouse job URL. - `baselineKeyValueStoreId` (string): Monitor only. Read SNAPSHOT from a prior run; the prior store is never modified. - `monitorOutput` (string): Emit only changes by default, or include unchanged comparable jobs as well. - `includeContent` (boolean): Adds HTML and normalized text and increases response size. - `includeQuestions` (boolean): Adds one detail request per job; no answers or applications are submitted. - `includePayTransparency` (boolean): Adds one detail request per job; values exist only when the employer exposes them. - `titleKeywords` (array): Keep jobs whose title contains at least one case-insensitive keyword. - `contentKeywords` (array): Keep jobs whose description contains at least one case-insensitive keyword. - `locations` (array): Keep jobs matching at least one case-insensitive location substring. - `departments` (array): Keep jobs matching at least one case-insensitive department substring. - `offices` (array): Keep jobs matching at least one case-insensitive office substring. - `firstPublishedAfter` (string): ISO date or instant, inclusive. - `updatedAfter` (string): ISO date or instant, inclusive. - `maxJobsPerBoard` (integer): Stop output after this many matching jobs per board and report the board as partial. - `maxJobsTotal` (integer): Stop output after this many matching jobs across the run and report omitted work. ## Tips - Find the board token in the career page link, for example job-boards.greenhouse.io/figma. - Leave job descriptions off on your first run. The output stays small and fast. - Check RUN_SUMMARY after each run. It shows if a board was read in full. ## Limits These bounds keep runs predictable. The Actor marks omitted work instead of claiming more coverage than it observed. - Up to 100 boards per snapshot or monitor run. - Up to 5,000 matching jobs per board. - Up to 10,000 matching jobs per run. - Up to 500 exact jobs in details mode. - Four boards and eight detail requests can run concurrently. - Description responses are capped at 64 MiB per board. - Detail responses are capped at 2 MiB each. ## Sample result ```json { "schemaVersion": 1, "recordType": "job", "stableId": "exampleco:1234567", "boardToken": "exampleco", "jobId": "1234567", "title": "Software Engineer", "location": { "name": "Remote" }, "changeStatus": null, "changedFields": [], "updatedAt": "2026-09-10T09:30:00.000Z", "absoluteUrl": "https://example.invalid/jobs/1234567" } ``` ## Use it from code Actor ID: `cliqtomedia/greenhouse-jobs-monitor-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/greenhouse-jobs-monitor-scraper").call(run_input={ "mode": "snapshot", "monitorOutput": "changes_only" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~greenhouse-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"mode": "snapshot", "monitorOutput": "changes_only"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/greenhouse-jobs-monitor-scraper") result = tool.invoke({"run_input": {"mode": "snapshot", "monitorOutput": "changes_only"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Reach out when the company is ready](https://cliqtomedia.com/actors/use-cases/buying-signals/): Know when a company hires, raises money or wins a contract. Reach out at the right moment. - [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/): See what your competitors launch, hire, change and advertise. Every week, without opening their sites. ## Similar tools - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) - [BambooHR Jobs Monitor & Scraper](https://cliqtomedia.com/actors/bamboohr-jobs-monitor-scraper/) --- # Hacker News Stories and Comments Scraper > Hacker News scraper: export Top, New, Best, Ask HN, Show HN or Jobs with comment trees and parent IDs. Plain text and HTML. No API key needed. URL: https://cliqtomedia.com/actors/hacker-news-stories-comments-scraper/ Category: Social media & communities · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/hacker-news-stories-comments-scraper?fpr=cliqto Export Hacker News stories and comments as rows. Each comment keeps its parent ID, so you can rebuild the thread. No API key is needed. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `[]` in Exact item IDs. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Export Hacker News stories and comments as rows with stable IDs and parent links. Choose Top, New, Best, Ask HN, Show HN or Jobs, or add exact item IDs. No Hacker News API key is needed. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.05 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Useful HN entity saved | $0.00027 | One live story, job or comment saved to the Dataset. Deleted, dead, unavailable and error rows have no entity fee. | - One story or comment: about $0.05. - 1,000 stories and comments: about $0.32. - Every day 100 stories and comments, for 30 days: about $2.31 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/hacker-news-stories-comments-scraper?fpr=cliqto ## Questions ### Does it get every comment of a big thread? Not always. There are caps per root and per run. The tree status tells you if a tree is complete. ### Does it open the linked article? No. You get the link from Hacker News, not the article text. ### Which lists can I use? Top, New, Best, Ask HN, Show HN and Jobs. ### Do I need an API key? No HN API key, cookie or login is needed. You need your Apify account to run the Actor. API clients use an Apify token in an authorization header, never in this Actor's input. ### Does it return every comment? Only when every reachable child is observed within the caps and `treeStatus` is complete. The new form intentionally uses small limits. Check the summary for each root. `descendants` is the source count, not a completeness check. ### Why are HTML and plain text different? `textHtml` keeps the source. `text` removes tags, adds block boundaries and decodes entities once. `&lt;` becomes `<`, not an HTML tag. Deleted items can have neither value. ### What do deleted, dead and null mean? Deleted and dead are source flags. A null response means the item was unavailable at fetch time. It does not prove why. These observations are kept; they are not silently dropped and do not have an entity fee. ### Why is there a start fee? The scan still makes requests and saves a summary when there are no useful entities. The start fee covers this bounded work. Each fresh run has its own start fee. ### Is it a replacement for another HN scraper? Use a field mapping before switching. This Actor uses numeric IDs, `url` for the external link and `hnUrl` for HN. Comments are flat rows with stable IDs, not nested message arrays. ## Data fields - `entityType` (string) - `id` (integer) - `type` (string) - `status` (string) - `reason` (string) - `rootId` (integer) - `storyId` (integer) - `parentId` (integer) - `depth` (integer) - `title` (string) - `hnUrl` (string) - `url` (string) - `author` (string) - `time` (integer) - `createdAt` (string) - `score` (integer) - `descendants` (integer) - `kids` (array) - `textHtml` (string) - `text` (string) - `deleted` (boolean) - `dead` (boolean) - `retrievedAt` (string) - `treeStatus` (string) - `treeReasons` (array) - `collectedComments` (integer) ## Input settings - `listMode` (string): Choose an official HN list. Non-empty itemIds take precedence. No source API key is needed. - `itemIds` (array): Optional positive integer HN IDs, at most 100. Non-empty array replaces the list; [] uses listMode. Duplicates are fetched once. - `maxStories` (integer): Read the first N distinct IDs in list or input order. Maximum 100. Start with 3. - `includeComments` (boolean): Return bounded replies as separate rows. Source descendants is not the number collected. Turn off for stories only. - `maxCommentsPerStory` (integer): Limit all descendant observations per root, including deleted, unavailable and error nodes. Zero means zero comments, never unlimited. - `maxDepth` (integer): Root is depth 0, direct reply is 1. Zero fetches roots only. A limit marks the tree partial when children remain. - `maxNodes` (integer): Total distinct roots and descendants reserved for fetch. At most 1000. Other request, time and byte caps may stop sooner. ## Step by step on Apify 1. Open Input in Apify Console. 2. Keep the new form as it is: Top stories, 3 roots, up to 5 comments per root and depth 2. 3. Keep memory at 256 MB and timeout at 300 seconds. Set a maximum cost of $0.15 for this small example. 4. Click Start. 5. Open Dataset. Look for a `story` row and `comment` rows linked by `rootId` and `parentId`. 6. Open Key-value store → RUN_SUMMARY. A current busy story can be `partial` because the example uses small caps. ## Use cases | Goal | Input choice | Fields to use | |---|---|---| | Track current tech discussions | `top`, `new` or `best` | `id`, `title`, `score`, `descendants`, `retrievedAt` | | Study project feedback | `show` or exact `itemIds` | `rootId`, `parentId`, `depth`, `text`, `treeStatus` | | Build a public discussion corpus | Exact IDs, bounded comments | `id`, `textHtml`, `text`, `deleted`, `dead`, summary | | Export HN jobs | `job`, comments off | `title`, `url`, `author`, `createdAt` | ## Tips - Add exact item IDs to export one known discussion. - Check the tree status to see if a comment tree is complete. - Use the plain text field for AI tools and the HTML field for display. ## Limits - At most 100 roots, 200 descendant observations per root, depth 10 and 1,000 total reserved nodes. A live Cloud export reached 1,000 observed nodes within the configured limits; this is a cap, not a guaranteed amount. - Only the six official lists are supported. Lists can be smaller than `maxStories` and can include jobs. Their order can change while the run is active. - Source work has a 90-second deadline, at most 1,300 HTTP attempts, concurrency 4, an 8-second request timeout, a 2 MiB response cap and an 8 MiB total response cap. Temporary transport, 429 and 5xx errors are retried up to three attempts within these caps. - Set platform timeout to 300 seconds. A longer finite timeout also works but does not increase the 90-second source deadline. A smaller timeout reduces the source window to leave time for saved output. - `comment_cap`, `depth_cap`, `node_cap`, `request_cap`, `byte_cap`, `response_byte_cap`, `deadline` and `charge_cap` show a limit. `unavailable_child`, `missing_parent`, `parent_mismatch`, `unexpected_child_type` and `duplicate_or_cycle` show an observed source/graph issue. - `treeStatus` describes what was fetched. If the charge cap stops saving rows, use run-level `status=partial` to see that the export is incomplete. - Original HTML is data. Do not render `textHtml`, titles or external URLs as trusted HTML in your own app. Use escaped text for display. The Dataset table displays plain text. - Scores and comments are live. The API is not an atomic snapshot. Dead/deleted/null states may change after a run. A hard platform kill can prevent final KVS writes; rows already saved remain in the Dataset. ## Sample result ```json [ { "entityType": "story", "id": 8863, "type": "story", "rootId": 8863, "storyId": 8863, "parentId": null, "depth": 0, "title": "My YC app: Dropbox - Throw away your USB drive", "hnUrl": "https://news.ycombinator.com/item?id=8863", "url": "http://www.getdropbox.com/u/2/screencast.html", "author": "example_user", "time": 1175714200, "score": 104, "descendants": 71, "status": "complete", "treeStatus": "complete", "collectedComments": 72 }, { "entityType": "comment", "id": 8917, "rootId": 8863, "storyId": 8863, "parentId": 8863, "depth": 1, "status": "complete" } ] ``` ## Use it from code Actor ID: `cliqtomedia/hacker-news-stories-comments-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/hacker-news-stories-comments-scraper").call(run_input={ "listMode": "top", "itemIds": [] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~hacker-news-stories-comments-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"listMode": "top", "itemIds": []}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/hacker-news-stories-comments-scraper") result = tool.invoke({"run_input": {"listMode": "top", "itemIds": []}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Hear what people say about you](https://cliqtomedia.com/actors/use-cases/social-listening/): Find what people say about your brand and your topic on Bluesky, Hacker News, YouTube and more. ## Similar tools - [RSS & Atom Feed Reader / Monitor](https://cliqtomedia.com/actors/rss-atom-feed-reader-monitor/) - [Link Route Audit — Bulk HTTP Status & Redirects](https://cliqtomedia.com/actors/bulk-url-status-redirect-checker/) - [Substack Newsletter Scraper](https://cliqtomedia.com/actors/substack-newsletter-scraper/) - [Bilibili Scraper: Videos, Comments & Creators, No Login](https://cliqtomedia.com/actors/bilibili-scraper/) - [Bluesky Scraper — Posts, Profiles, Feeds & Threads, No Login](https://cliqtomedia.com/actors/bluesky-scraper/) - [Medium Article Scraper: Tags, Authors & Publications](https://cliqtomedia.com/actors/medium-articles-scraper/) --- # HireHive jobs scraper with new and closed job tracking > HireHive jobs scraper for public company boards. Get role text, dates and links. Compare runs to see new, updated and closed jobs. JSON or CSV. URL: https://cliqtomedia.com/actors/hirehive-jobs-monitor-scraper/ Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/hirehive-jobs-monitor-scraper?fpr=cliqto Add the HireHive boards of companies you know. Get each open job with its text, dates and link. Turn on change mode to see only new, updated and closed jobs. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `ksn` in HireHive boards. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Read jobs from known public HireHive company boards. Get role text, dates and links, then compare full snapshots to see new, updated and closed jobs. Add a board such as `ksn` and press **Start**. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.027 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Saved job or change | $0.0036 | One saved public job row, including closed jobs in change mode. | - One job: about $0.03. - 1,000 jobs: about $3.63. - Every day 100 jobs, for 30 days: about $11.61 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/hirehive-jobs-monitor-scraper?fpr=cliqto ## Questions ### Do I need a HireHive login? No. The tool reads public board content only. It does not use the private dashboard. ### How many boards can I check at once? Up to four known company boards in one run. ### Does a closed job mean someone was hired? Not always. It only means the job left the public board between two full checks. ### Do I pay if nothing changed? Yes, the start fee. Rows are paid only when they are saved. ### Do I need a HireHive API key? No. The Actor reads public board content. It does not use the private HireHive dashboard API. ### Does an empty scan cost money? Yes. Every started scan has the start fee. A filter or no-change result still reads the full source. ### Does a closed row prove that a job was filled? No. It means the ID left the public board between two complete checks. The company may have closed or replaced it for another reason. ### Can it detect a description change when I hide descriptions? Yes. includeDescription controls Dataset only. The complete description stays in the snapshot and its hash. ### Is it a replacement for every multi-ATS scraper? No. It supports public HireHive boards and their source fields. It does not add multi-ATS discovery, candidate records, salary estimates or contact enrichment. ## Data fields - `ats` (string) - `org` (string) - `company` (string) - `jobId` (string) - `globalId` (string) - `title` (string) - `contentHash` (string) - `scrapedAt` (string) - `status` (string) - `jobUrl` (string) - `schemaVersion` (integer) - `companyTotalJobs` (integer) - `locations` (array) - `address` (object) - `department` (string) - `employmentType` (string) - `language` (string) - `languageLabel` (string) - `location` (string) - `salaryText` (string) - `descriptionText` (string) - `publishedAt` (string) - `changeType` (string) ## Input settings - `boards` (array): Add 1–4 known company slugs or HTTPS HireHive root links. Duplicate boards are read once. Custom domains and job links are not supported. - `keywords` (array): Keep titles with any phrase, ignoring case. Empty keeps all. Up to 20 phrases, each 1–100 characters. This does not reduce the full scan. - `maxResults` (integer): Save 1–53 rows, including closed jobs. An output cap makes the snapshot partial; it cannot be used as a monitoring baseline. - `includeDescription` (boolean): Add public job descriptions as plain text. False hides this field. The full text still helps detect changes. It does not add a detail request. - `incremental` (boolean): Return new, updated and closed jobs. The first check returns all as new. Later checks need previousRunId from a complete run with the same boards. - `previousRunId` (string): Used with incremental=true. Use a successful complete run of this Actor, with the same boards. Empty starts a new baseline. Missing or partial snapshots stop the run. ## Step by step on Apify 1. Open Input. 2. Add `ksn` to HireHive boards. Leave the other values at their defaults. 3. Press Start. 4. Open Dataset. Look for `Contact Centre Agent`, a Dublin location and its HireHive link. On the check date, KSN had six jobs. The live count can change. 5. Open `RUN_SUMMARY` in Key-value store. Check that `status` is `complete` and `counts.delivered` equals the Dataset count. ## Use cases - Keep a job feed up to date: use `globalId`, `title`, `location` and `jobUrl`. - Watch hiring changes at companies you know: compare full snapshots and read `changeType`. - Find role text for research: keep `descriptionText` and the source link. - Send a clean table to a spreadsheet: export Dataset and use jobId to avoid duplicates. ## Tips - The board name is the first part of the HireHive web address, like ksn. - Do not set a low row limit for monitoring. A capped run cannot be a baseline. - Use jobId to avoid duplicate rows when you add jobs to a sheet. ## Limits The tested maximum is four boards and 53 saved rows. Limits are 200 scanned jobs, 16 source requests including retries, 90 seconds of source work, 2 MiB per response and 4 MiB of total response data. A job description above 60,000 characters makes that scan partial. Runs use 256 MB; the recommended platform timeout is 120 seconds. A 300-second Store test or larger finite positive timeout is supported without extending the 90-second source deadline; source requests retry temporary failures at most twice. Larger memory or an unbounded timeout is refused before source work. - `complete`: all source pages were checked and all selected rows were saved. Zero rows can be valid. - `partial`: some data was read, but a source, output, charge or runtime limit stopped the full result. Keep your last complete baseline. - `not_found`: all requested boards returned HTTP 404. No job rows; snapshot unsafe. - `error`: invalid input, invalid previous snapshot, no readable source, or a runtime failure. Check the summary; a platform failed run may have incomplete storage. ## Sample result ```json { "schemaVersion": 1, "ats": "hirehive", "org": "addo", "company": "ADDO", "companyTotalJobs": 1, "jobId": "79402", "globalId": "hirehive:addo:79402", "title": "Business Analyst", "department": null, "employmentType": "FullTime", "language": "en", "languageLabel": "English", "location": "12/2 A, Sector XX, Phase 3, DHA, Lahore, Pakistan", "locations": ["12/2 A, Sector XX, Phase 3, DHA, Lahore, Pakistan"], "address": { "city": "12/2 A, Sector XX, Phase 3, DHA, Lahore", "country": "Pakistan", "countryCode": "PK" }, "salaryText": null, "descriptionText": "Responsibilities We are looking for a business analyst (BA) who will primarily serve as a liaison between our clients and project resources.", "publishedAt": "2021-05-19T10:09:46.000Z", "jobUrl": "https://addo.hirehive.com/business-analyst-122-a-sector-xx-phase-3-dha-lahore-L0BpOZ", "status": "complete", "changeType": null, "scrapedAt": "2026-10-04T09:01:55.579Z", "contentHash": "1ad053a5ca09de25dafa201a36482edcb382bd814de520dea590fff94a4324b4" } ``` ## Use it from code Actor ID: `cliqtomedia/hirehive-jobs-monitor-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/hirehive-jobs-monitor-scraper").call(run_input={ "boards": [ "ksn" ], "keywords": [] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~hirehive-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"boards": ["ksn"], "keywords": []}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/hirehive-jobs-monitor-scraper") result = tool.invoke({"run_input": {"boards": ["ksn"], "keywords": []}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) --- # Hireology jobs scraper for career pages you follow > Hireology jobs scraper for known career pages. Get descriptions, locations, pay when listed and apply links. Track new, changed and removed jobs. URL: https://cliqtomedia.com/actors/hireology-jobs-monitor-scraper/ Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/hireology-jobs-monitor-scraper?fpr=cliqto Paste a Hireology career page link. You get each current job with its place, pay when shown and apply link. Save snapshots to see what changed later. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `https://careers.hireology.com/hyattneward` in Hireology company career URLs. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Get current job listings from known public Hireology career pages. This Hireology jobs scraper returns descriptions, locations, pay when shown, and links to apply. Save full snapshots to track new, changed and removed jobs. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.06 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Current job saved | $0.0036 | One unique matching current job saved to Dataset. Snapshot and change reports have no extra event. | - One job: about $0.06. - 1,000 jobs: about $3.66. - Every day 100 jobs, for 30 days: about $12.60 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/hireology-jobs-monitor-scraper?fpr=cliqto ## Questions ### How many career pages can I add? Up to 10 company boards and 200 jobs in one run. ### Do I always get the pay? No. Pay appears only when the employer lists it on the job. ### Can I use a company's own careers domain? No. Use the careers.hireology.com link of the company. ### Do I need a proxy or account? No. The tool reads public pages and uses no proxy. ## Data fields - `ats` (string) - `org` (string) - `company` (string) - `jobId` (string) - `globalId` (string) - `title` (string) - `department` (string) - `employmentType` (string) - `isRemote` (boolean) - `location` (string) - `locations` (array) - `descriptionHtml` (string) - `descriptionText` (string) - `publishedAt` (string) - `jobUrl` (string) - `applyUrl` (string) - `compensation` (object) - `salaryText` (string) - `contentHash` (string) - `companyTotalJobs` (integer) - `jobsFound` (integer) - `inputIndex` (integer) - `scrapedAt` (string) - `sourceStatus` (string) ## Input settings - `startUrls` (array, required): Enter 1–10 known HTTPS company board URLs. Job URLs and custom domains are not accepted. Duplicate boards are read once. - `includeDescription` (boolean): Default true. Set false to omit HTML and text in Dataset rows. Full scan and snapshot fingerprints still use descriptions. - `titleKeyword` (string): Case-insensitive title filter, up to 100 characters. Applied after full scan; start charge still applies when no jobs match. - `maxResults` (integer): 1–200, default 200. Limits output only; does not limit full source scan or snapshot. - `maxJobsPerCompany` (integer): 1–200, default 200. Exceeding this or the global 200-job snapshot limit makes that board partial and skips its comparison. - `maxRequests` (integer): 1–100, default 100. Includes retries. Reaching the limit marks unfinished boards partial. - `previousSnapshot` (object): Paste the SNAPSHOT JSON from a previous run. At most 10 companies / 200 jobs / 2MB. Only complete matching boards are compared. Leave absent for first scan. ## Step by step on Apify 1. Open Input. 2. In `startUrls`, enter `https://careers.hireology.com/hyattneward`. 3. Keep descriptions on and use 256 MB of memory. 4. Set a maximum run charge, then click Start. 5. Open Dataset for current jobs and `OUTPUT` for scan status. ## Use cases | Task | Input | Useful result | |---|---|---| | Update a small job board | Known company URLs | Job ID, title, description and application link | | Watch hiring activity | Same URLs and previous full SNAPSHOT | New, changed and removed entries | | Review public hotel or dealership roles | URLs and optional title filter | Employer, city, employment type and listed pay | ## Tips - Use the company board link, like careers.hireology.com/hyattneward. Job links are not accepted. - Group boards can show jobs from child employers. Their links stay correct. - Use the title filter for one role. The full board is still read for the snapshot. ## Limits The first release was checked on 10 live boards and 182 jobs in one complete run. Hard limits are 10 input boards, 200 fetched jobs across the snapshot, 200 saved rows, 100 HTTP attempts and 180 seconds of application work. Responses have an 8 MB total limit, and each description has a 64 KB limit. Longer titles above 200 characters are rejected as source field errors. Requests run in sequence, with up to two retries for temporary failures. No proxy is used. ## Sample result ```json { "ats": "hireology", "org": "hyattneward", "company": "Hyatt Place Newark / Silicon Valley", "jobId": "2506809", "globalId": "hireology:hyattneward:2506809", "title": "Hotel Director of Sales", "location": "Newark, CA", "employmentType": "FullTime", "salaryText": "70000–100000 / year", "publishedAt": "2025-03-24T20:41:19.901Z", "jobUrl": "https://careers.hireology.com/hyattneward/2506809/description", "applyUrl": "https://careers.hireology.com/hyattneward/2506809/application", "sourceStatus": "complete" } ``` ## Use it from code Actor ID: `cliqtomedia/hireology-jobs-monitor-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/hireology-jobs-monitor-scraper").call(run_input={ "startUrls": [ "https://careers.hireology.com/hyattneward" ], "includeDescription": True }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~hireology-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"startUrls": ["https://careers.hireology.com/hyattneward"], "includeDescription": true}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/hireology-jobs-monitor-scraper") result = tool.invoke({"run_input": {"startUrls": ["https://careers.hireology.com/hyattneward"], "includeDescription": True}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) --- # Historical Exchange Rates and Currency Converter > Historical exchange rates from the ECB for any pair and date since 1999. Cross rates, weekend and holiday notes, and amount conversion. No API key. URL: https://cliqtomedia.com/actors/historical-fx-rates-converter/ Category: Finance, markets & sports · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/historical-fx-rates-converter?fpr=cliqto Get official ECB exchange rates for any pair and date since 1999. Convert amounts with them. Days without a rate are marked with a clear reason. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `EUR/USD` in Currency pairs. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Get official European Central Bank (ECB) exchange rates for any currency pair and any date since 1999, and convert amounts with them. Add a pair like `USD/JPY` and a date, and you get one clear row per pair and day. Weekends, ECB holidays and days not published yet are marked, not hidden. No API key is needed, and a typical run (2 pairs, last 7 days) costs about $0.01. - Any pair. The ECB publishes rates against the euro. For pairs without the euro, like `USD/JPY`, the Actor computes the cross rate from the two euro rates and shows both of them (`eurToBase`, `eurToQuote`). You can check the math yourself. - Any date since 1999-01-04. You can use a list of dates, a date range or the last N days. - Every day explained. A day without a rate has `status: no_rate` and a reason in `note`: `weekend`, `ecb_holiday`, `not_yet_published` or `currency_not_quoted`. - Optional fill. With `missingDatePolicy: last_published`, a missing day gets the last published rate before it. `effectiveDate` always shows which day's rate was used. - Conversion. Add amounts and get `convertedAmount` = amount × rate, rounded the way you choose. ### Good for - Accounting and invoices: the official ECB rate for the invoice date. - Finance and audit: a full rate history for a pair, with holidays clearly marked. - Reports and BI: a clean daily table of rates for several pairs. ### Not a good fit - No live or intraday rates. The ECB publishes once a day; today's rate appears after about 16:00 CET. - About 30 currencies are quoted today (45 in the full history). No crypto, no exotic currencies outside the ECB list. - These are reference rates for information. They are not bank buy/sell rates. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.002 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Exchange rate row | $0.0009 (from $0.00075 on paid Apify plans) | One row with an official ECB rate (direct, inverse or cross) for one pair, date and amount, saved to the Dataset. | | Row without a rate | $0.00003 | One row that explains why there is no rate (weekend, holiday, not yet published, currency not quoted or not supported) or a same-currency pair. Dates the source failed for are not written or charged. | - One rate row: about $0.0029. - 1,000 rate rows: about $0.90. - Every day 100 rate rows, for 30 days: about $2.76 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/historical-fx-rates-converter?fpr=cliqto ## Questions ### Why is there no rate on Saturday? The ECB does not publish on weekends and its holidays. The row says why. ### Are these bank rates? No. They are reference rates for information, not buy or sell rates. ### Can I get USD to JPY? Yes. The tool computes the cross rate from two euro rates and shows both. ### Does it have crypto? No. Only about 30 currencies from the ECB list. ### Do I need an API key? No. The Actor reads public ECB data. ### How fresh is the data? The Actor reads the source on every run. `providerLastPublished` shows the latest ECB publication at that time. ## Data fields - `pair` (string): Pair as BASE/QUOTE, e.g. EUR/USD. - `base` (string): Base currency (ISO 4217). - `quote` (string): Quote currency (ISO 4217). - `requestedDate` (string): Date you asked for (YYYY-MM-DD). - `effectiveDate` (string): Publication date the rate comes from. Differs from requestedDate only with last_published; empty when there is no rate. - `status` (string): Row result: ok, no_rate or unsupported_currency. Dates the source failed for get no rows; they are listed in RUN_SUMMARY (sourceError). - `note` (string): Machine-readable reason: weekend, ecb_holiday, not_yet_published, currency_not_quoted, last_published_used, same_currency or unsupported_currency. Empty for a normal published rate. - `noteText` (string): The same reason in plain English. - `rate` (number): Units of QUOTE for 1 BASE on effectiveDate. ECB value as published for EUR/X; exact computation from the two ECB euro rates otherwise (10 significant digits). - `inverseRate` (number): Units of BASE for 1 QUOTE (1 / rate, 10 significant digits). - `rateType` (string): How the rate was obtained: direct (EUR/X as published), inverse (X/EUR), cross_via_EUR (X/Y from both euro rates) or identity (X/X). - `eurToBase` (number): ECB euro reference rate of the base currency on effectiveDate (1 for EUR). - `eurToQuote` (number): ECB euro reference rate of the quote currency on effectiveDate (1 for EUR). - `amount` (number): Amount in BASE you asked to convert; empty when no amounts were given. - `convertedAmount` (number): amount × rate in QUOTE, rounded to the chosen decimals. - `provider` (string): Rate provider key, e.g. ECB. - `providerName` (string): Rate provider name. - `providerLastPublished` (string): Latest publication date the provider had at run time. - `source` (string): Data access route (Frankfurter API v2). - `sourceUrl` (string): API request that returned the rates for this row (or the provider currency list for unsupported codes). - `fetchedAt` (string): When the run fetched the data (ISO 8601, UTC). ## Input settings - `pairs` (array, required): Up to 10 pairs as BASE/QUOTE with 3-letter ISO codes, e.g. EUR/USD, USD/JPY or GBP/PLN. Also accepted: EURUSD, eur-usd. The rate is how many QUOTE units one BASE unit buys. Any two ECB currencies can be combined; pairs without EUR are computed exactly from the two ECB euro rates. Codes the ECB does not publish get an unsupported_currency row. - `dates` (array): Up to 100 dates in YYYY-MM-DD format, e.g. 2024-12-31, from 1999-01-04 to today (UTC). Rows keep this order. When set, Date from/to and Last days are ignored. - `dateFrom` (string): Start of a date range (YYYY-MM-DD), used together with Date to. Every calendar day in the range gets a row, at most 366 days. Ignored when Specific dates is set. - `dateTo` (string): End of the date range (YYYY-MM-DD), not later than today (UTC). - `lastDays` (integer): Used only when no dates and no range are given: every calendar day from N−1 days ago to today (UTC). Default 7. Today usually shows not_yet_published until the ECB releases rates around 16:00 CET. - `provider` (string): Official source of the rates. ECB reference rates are published on TARGET business days around 16:00 CET for about 30 currencies (more historically). - `missingDatePolicy` (string): What to do on weekends, ECB holidays and days not published yet. last_published looks back at most 10 days and always shows effectiveDate; it never carries forward a currency the ECB stopped quoting. Default: none. - `amounts` (array): Optional, up to 10 amounts in the BASE currency, e.g. 100 or 2500.50. Each amount gets its own row with convertedAmount = amount × rate. Leave empty to get rates only. - `rounding` (integer): Decimal places for convertedAmount (0–8), rounded half away from zero. Rates are never rounded beyond what the ECB publishes (cross rates keep 10 significant digits). Default 2. ## Step by step on Apify 1. Open the Input tab. 2. In Currency pairs (`pairs`), keep the prefill `EUR/USD` and `EUR/GBP` or add your own, for example `USD/JPY`. 3. Keep Last days (`lastDays`) at 7, or add Specific dates (`dates`), for example `2024-12-31`. 4. Click Start. 5. Open the Output tab. Each row has `pair`, `requestedDate`, `status`, `rate` and `note`. ## Tips - Use the last published option to fill weekends with Friday's rate. - Check effectiveDate. It shows which day's rate was used. - Run after about 16:00 CET to get today's rate. ## Limits - Platform usage (compute, storage) is included. You do not pay it. - Rows from `missingDatePolicy: skip` are not written and not charged. - If the source fails, no rows are written for the failed dates, so they are not charged. - An invalid input costs only the Actor start. - If you set a maximum cost for the run, the Actor stops writing rows before it goes over it. The summary says `CAPPED`. - Up to 10 pairs, 100 dates or a 366-day range, 10 amounts and 10,000 rows per run. - The largest tested run (10,000 rows) took about 30 seconds. - Dates from 1999-01-04 to today (UTC). ## Sample result ```json { "pair": "USD/JPY", "base": "USD", "quote": "JPY", "requestedDate": "2024-12-31", "effectiveDate": "2024-12-31", "status": "ok", "note": null, "noteText": null, "rate": 156.9544711, "inverseRate": 0.006371274377, "rateType": "cross_via_EUR", "eurToBase": 1.0389, "eurToQuote": 163.06, "amount": 1000, "convertedAmount": 156954.47, "provider": "ECB", "providerName": "European Central Bank", "providerLastPublished": "2026-10-09", "source": "Frankfurter API v2 (frankfurter.dev)", "sourceUrl": "https://api.frankfurter.dev/v2/rates?base=EUR"es=GBP%2CJPY%2CUSD&providers=ECB&from=2024-12-21&to=2024-12-31", "fetchedAt": "2026-10-12T10:48:11.221Z" } ``` ## Use it from code Actor ID: `cliqtomedia/historical-fx-rates-converter` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/historical-fx-rates-converter").call(run_input={ "pairs": [ "EUR/USD", "EUR/GBP" ], "lastDays": 7 }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~historical-fx-rates-converter/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"pairs": ["EUR/USD", "EUR/GBP"], "lastDays": 7}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/historical-fx-rates-converter") result = tool.invoke({"run_input": {"pairs": ["EUR/USD", "EUR/GBP"], "lastDays": 7}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/): Track prices and offers in shops and marketplaces. See changes before your customers do. ## Similar tools - [SEC Form D Filing Monitor](https://cliqtomedia.com/actors/sec-edgar-form-d-funding-monitor/) - [Crypto Prices & OHLC History Export - No Login](https://cliqtomedia.com/actors/crypto-market-data/) - [Polymarket & Kalshi Prediction Market Data, No Login](https://cliqtomedia.com/actors/prediction-markets-data/) - [Tennis Scraper: ATP & WTA Matches, Players & Rankings](https://cliqtomedia.com/actors/tennis-stats-scraper/) --- # Homerun jobs scraper for company career pages > Homerun jobs scraper for known career pages. Get job text, pay details and apply links. Compare full snapshots to see new, updated and removed roles. URL: https://cliqtomedia.com/actors/homerun-jobs-monitor-scraper/ Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/homerun-jobs-monitor-scraper?fpr=cliqto Add the Homerun career pages of companies you know. You get each opening with its description, pay details and apply link. Monitor mode shows what changed since the last full scan. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `https://jobs.homerun.co/` in Homerun career pages. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Read open jobs from known public Homerun career pages. Get each job description, pay details and apply link. Compare complete snapshots to see new, updated and removed roles. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.06 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Job saved | $0.0018 | One matching current job saved to the default Dataset. | - One job: about $0.06. - 1,000 jobs: about $1.86. - Every day 100 jobs, for 30 days: about $7.20 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/homerun-jobs-monitor-scraper?fpr=cliqto ## Questions ### Do I need a Homerun API key? No. The tool reads public career and job pages only. ### How many companies fit in one run? One to four Homerun career pages, and up to 40 jobs. ### Are talent pools included? Yes, when the company lists them as openings. They can have fewer fields. ### Will a failed page mark jobs as removed? No. Removed jobs need a complete scan. A failed run keeps the last good baseline. ### Does a failed board mean all its jobs were removed? No. Removed events require a complete full scan. Partial, missing and failed pages keep the last complete baseline. ### Can I use a custom career domain? This version accepts company subdomains on homerun.co only. Custom domains and redirects fail explicitly. ## Data fields - `jobId` (string) - `boardJobId` (string) - `jobKey` (string) - `title` (string) - `url` (string) - `applyUrl` (string) - `detailSource` (string) - `rowStatus` (string) - `careerSiteUrl` (string) - `source` (string) - `fetchedAt` (string) - `change` (string) - `companyName` (string) - `department` (string) - `location` (string) - `city` (string) - `region` (string) - `countryCode` (string) - `employmentType` (string) - `datePosted` (string) - `validThrough` (string) - `salaryCurrency` (string) - `salaryPeriod` (string) - `description` (string) - `firstSeenAt` (string) - `salaryMin` (number) - `salaryMax` (number) - `remote` (boolean) - `descriptionTruncated` (boolean) ## Input settings - `careerUrls` (array, required): Add 1–4 HTTPS root URLs on a single company subdomain of homerun.co. No custom domains, language query or detail URLs. Duplicate boards are read once. - `query` (string): All words must occur in title, company, department or description, ignoring case. Empty keeps all jobs. Filtering still reads full boards. - `location` (string): Case-insensitive text in location, city, region or country code. Empty keeps all locations. - `maxResults` (integer): Dataset limit 1–40. All scans stop after 40 unique jobs. Output limits mark the run partial and prevent snapshot updates. - `monitor` (boolean): Track new, updated and removed jobs. Only complete scans save a new baseline. Read CHANGES for removals; first complete scan marks all jobs new. - `monitorKey` (string): Use 1–64 letters, digits, _ or -. The name and sorted boards define a separate watchlist. Filters do not change the full-board baseline. Do not run the same watchlist concurrently. - `onlyChanges` (boolean): Requires monitor=true. Unchanged jobs stay in the full snapshot but are not output. Removals appear in CHANGES. Same scan cost applies. ## Step by step on Apify 1. Open Input. 2. In `careerUrls`, add `https://jobs.homerun.co/`. 3. Keep `maxResults=40` and `monitor=false`. Use 256 MB and a 180-second timeout. 4. Click Start. 5. Open Dataset. Check `title`, `description`, `url` and `rowStatus`. 6. Open Key-value store → OUTPUT. Check that `status` is `complete`. ## Use cases | Task | Input | Result to use | |---|---|---| | Fill a job board | Known company URLs | title, description, location, url and applyUrl | | Follow hiring activity | monitor=true | CHANGES.new, CHANGES.changed and CHANGES.removed | | Find matching roles | query and location | Matching Dataset rows; full scan status in OUTPUT | ## Tips - Use the company subdomain on homerun.co. Custom domains are not supported. - Give each watchlist its own name. Then two lists do not mix. - Use the location filter with a city or country code to narrow results. ## Limits - One run accepts 1–4 known Homerun company root URLs. Custom domains, language queries, login pages and redirects are not supported. - Live Cloud acceptance covered 14 complete jobs across four companies. The runtime cap is 40 scanned jobs and 40 saved rows. The 40-job limit was checked on offline fixtures, not a 40-job live board. - The source work has a 150-second deadline, 100 request attempts, 2 MiB per page and 12 MiB of streamed source bodies. Cloud defaults are 256 MB and 180 seconds; 512 MB is also supported. - `complete` means all pages were read and the requested output was saved. `partial` means some work was missing or capped. It does not save a new monitoring baseline. - `not_found` means all source boards returned HTTP 404/410. Other failures are `error` or `partial` in a mixed run. A wildcard redirect is an error, not an empty board. - Dates, salary, department and remote metadata can be missing. Open applications and talent pools can use plain HTML and have fewer fields. - Descriptions are plain text and can include list markers. Source HTML and company openings can change between runs. The tool is not an official Homerun product. - Resume/restart is not supported. Start a new run after a failed run. Partial Dataset results remain visible. ## Sample result ```json { "jobId": "job_mlVLWyEWw1l6EyqLE3LX", "boardJobId": "382587", "title": "Head of Sales", "companyName": "Homerun", "location": "Amsterdam", "salaryMin": 75000, "salaryCurrency": "EUR", "salaryPeriod": "year", "url": "https://jobs.homerun.co/head-of-sales", "applyUrl": "https://jobs.homerun.co/head-of-sales/apply", "rowStatus": "complete", "change": "untracked" } ``` ## Use it from code Actor ID: `cliqtomedia/homerun-jobs-monitor-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/homerun-jobs-monitor-scraper").call(run_input={ "careerUrls": [ "https://jobs.homerun.co/" ], "query": "" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~homerun-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"careerUrls": ["https://jobs.homerun.co/"], "query": ""}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/homerun-jobs-monitor-scraper") result = tool.invoke({"run_input": {"careerUrls": ["https://jobs.homerun.co/"], "query": ""}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) --- # Idealo Price Scraper: Shop Offers in 6 Countries > Idealo scraper for 6 countries: shop offers with price, shipping, total price, delivery time and shop rating, plus GTIN and brand. No login. URL: https://cliqtomedia.com/actors/idealo-price-scraper/ Category: E-commerce & prices · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/idealo-price-scraper?fpr=cliqto Type a product name or paste idealo links. You get the price of every shop for that product. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `airpods pro` in Search queries. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Idealo Price Scraper reads idealo price comparison pages and returns every shop offer for a product: shop, price, shipping, total price, delivery time, shop rating and shop link. It works on idealo.de, idealo.at, idealo.fr, idealo.it, idealo.es and idealo.co.uk. - Search mode: you type keywords. The Actor takes the products from the first results page of each search, in idealo's order, and reads each product page. - Products mode: you paste idealo product URLs or product IDs. The Actor reads exactly those products. URLs can come from different countries in one run. ### Good for - Watch the price of your products in several countries every day. - See all shops that sell a product, with shipping and total price, not only the cheapest one. - Find a product's GTIN/EAN, brand and category from a keyword. ### Not a good fit - Only the 6 idealo sites above. Other countries and other price comparison sites are not supported. - Search mode reads only the first results page of each search. Single-shop offers without an idealo price comparison page are skipped. - Up to 200 products and up to 200 offers per product in one run (20 offers per product by default). - Prices are what idealo shows at the time of the run. Shops can change prices at any time. - Used and refurbished offers are not in the offer list (idealo shows them separately). ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Product with offers | $0.0045 (from $0.0038 on paid Apify plans) | One idealo product saved to the dataset with its first page of shop offers (up to 20). not_found and error rows are not charged as products. | | Extra offer page | $0.0015 | One more page of up to 20 shop offers for a product (offers 21-40, 41-60, ...). Only when maxOffersPerProduct is above 20 and the page added offers. | | Search query | $0.002 | One idealo search results page read, also when it lists no products. | | Product not found | $0.002 | One product ID or URL checked that idealo does not have (not_found row). Invalid inputs and source errors are free. | | Country site opened | $0.0045 | One idealo country site (idealo.de, .at, .fr, .it, .es or .co.uk) opened in the run, charged once per site after its first successful page read. Opening a site needs a real browser warm-up. | | Start fee | $0.009 | Charged once per run, one fee per GB of memory. This tool uses 2 GB by default, so $0.018 per run. | - One product: about $0.03. - 1,000 products: about $4.61 (5 runs of up to 200). - Every day 100 products, for 30 days: about $14.17 a month. - 200 products once a week (4 runs a month): about $3.69 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/idealo-price-scraper?fpr=cliqto ## Questions ### Is this an official idealo tool? No. It reads the public idealo pages. ### Are used offers included? No. Used and refurbished offers are not in the list. ### Why do I get fewer offers than offerCount? The tool saves 20 offers per product by default. You can raise it to 200. ### Are prices up to date? They are what idealo shows at run time. Shops can change prices at any time. ### Do I need an idealo account or an API key? No. The Actor reads the public idealo pages. No login, no API key. ### Is the output the same as other idealo scrapers? The prices, shops and product IDs are the same as on idealo, but field names are different (for example `title`, `gtin` and a nested `offers` list). If you move from another Actor, map the fields once. ### Why are the rows not in the same order as my URLs? In products mode the Actor reads all products of one idealo site, then the next site. This keeps the run fast and cheap. Use `input` to match rows with your list. ## Data fields - `status` (string): complete: product and requested offers read; partial: product read but some offers or fields missing (see error); not_found: no such product; error: invalid input entry. complete and partial rows are charged as products; a not_found row is charged as a cheaper product-not-found check; error rows are free. - `productId` (string): idealo product ID, the same across countries. - `title` (string): Product name. - `url` (string): Product comparison page on idealo (or the input text for invalid entries). - `domain` (string): idealo site the product was read from. - `category` (string): Product category as named on that site. - `categoryId` (string): idealo category ID. - `brand` (string): Brand. - `gtin` (string): GTIN/EAN when idealo lists one. - `imageUrl` (string): Product image. - `currency` (string): EUR or GBP. - `bestPrice` (number): Lowest offer price on idealo (without shipping). - `highestPrice` (number): Highest offer price on idealo. - `offerCount` (integer): Total number of offers idealo lists for the product. - `offersReturned` (integer): Number of offers in this row (up to maxOffersPerProduct). - `rating` (number): Product rating on idealo (1–5 scale as shown); null when unrated. - `ratingCount` (integer): Number of product ratings. - `offers` (array): Shop offers in idealo default order. - `searchQuery` (string): Search query that found the product (search mode). - `searchPosition` (integer): Position among products on the first results page (search mode). - `input` (string): Product URL or ID as given (products mode). - `error` (string): Why the row is partial, not_found or error; null otherwise. - `source` (string): Always "idealo". - `fetchedAt` (string): When the product page was read (ISO 8601). ## Input settings - `mode` (string): Search: find products by keyword on the chosen idealo site. Products: read the idealo product pages you paste below. - `queries` (array): Keywords as you would type them on idealo, e.g. "airpods pro" or "samsung galaxy s25". Up to 20 queries; products from the first results page of each query are returned in idealo's order. Used when "What to scrape" is Search. - `productUrls` (array): idealo product comparison pages from any supported country, e.g. https://www.idealo.de/preisvergleich/OffersOfProduct/207671730_-airpods-pro-3-apple.html or https://www.idealo.fr/prix/207671730/apple-airpods-pro-3.html, or bare numeric product IDs (read on the site chosen below). Up to 200. Used when "What to scrape" is Products. - `domain` (string): Country site for searches and for bare product IDs. Product URLs always use their own site. Each country site opened in a run is one country-site event. - `maxItems` (integer): Most products to return in this run (1–200). Each returned product is one product event; a product ID that idealo does not have is a cheaper not-found event; invalid entries are free. Empty: 10 for searches, all pasted products in Products mode. - `maxOffersPerProduct` (integer): Shop offers to return per product, cheapest first in idealo's default order (0–200). 20 offers come with the product page; more are loaded 20 at a time, which takes a little longer and is charged as one extra offer page per 20 offers. 0 returns product data and best price only. - `proxyConfiguration` (object): Not needed in most cases. Turn on Apify Proxy only if runs report that idealo blocked the requests. ## Step by step on Apify 1. Open the Input tab. 2. Keep What to scrape = `Search` and the prefilled query `airpods pro`. 3. Keep idealo site = `idealo.de (Germany)` and Max products = `10`. 4. Click Start. 5. Open the Output tab. The `Products` view shows one row per product; the `All offers` view shows one row per shop offer. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Track prices of my product list | `mode: products`, `productUrls` | product row | `bestPrice`, `offerCount`, `offers[].totalPrice` | Schedule + Google Sheets or webhook | | Compare shops for one product | `productUrls`, `maxOffersPerProduct: 100` | offers | `offers[].shop`, `price`, `shipping`, `availability` | CSV / Excel export | | Find products and EANs by keyword | `mode: search`, `queries` | product row | `title`, `gtin`, `brand`, `category` | API / JSON | | Compare one product across countries | the same product ID as URLs on several idealo sites | product row per site | `domain`, `currency`, `bestPrice` | API / JSON | ## Tips - Paste product URLs for exact products. Search reads only the first results page. - Raise the offers per product from 20 if you need more shops. - Mix URLs from different countries in one run to compare markets. ## Limits - Up to 20 search queries and 200 product URLs or IDs per run; at most 200 products saved. - Up to 200 offers per product. - Default timeout is 900 seconds; 200 products with 20 offers take about 5 minutes. With many offers per product (100+), raise the timeout in run options. - Memory is fixed at 2 GB (a real Chrome browser is used). ## Sample result ```json { "status": "complete", "productId": "207671730", "title": "Apple AirPods Pro 3", "url": "https://www.idealo.de/preisvergleich/OffersOfProduct/207671730_-airpods-pro-3-apple.html", "domain": "de", "category": "Kopfhörer", "categoryId": "2520", "brand": "Apple", "gtin": "0195950543650", "currency": "EUR", "bestPrice": 193, "highestPrice": 281.95, "offerCount": 57, "offersReturned": 20, "rating": 4.6, "ratingCount": 10, "offers": [ { "position": 1, "shop": "kaufland.de", "shopId": "26895", "marketplaceSeller": "pricerush", "price": 193, "shipping": 9.99, "totalPrice": 202.99, "currency": "EUR", "availability": "Lieferung: bis Sa. 17.10.", "shopRating": 4.5, "shopRatingCount": 56444 } ], "searchQuery": "airpods pro", "searchPosition": 1, "input": null, "error": null, "source": "idealo" } ``` ## Use it from code Actor ID: `cliqtomedia/idealo-price-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/idealo-price-scraper").call(run_input={ "mode": "search", "queries": [ "airpods pro" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~idealo-price-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"mode": "search", "queries": ["airpods pro"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/idealo-price-scraper") result = tool.invoke({"run_input": {"mode": "search", "queries": ["airpods pro"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/): Track prices and offers in shops and marketplaces. See changes before your customers do. ## Similar tools - [AliExpress Scraper: Products, Prices & Reviews, No Login](https://cliqtomedia.com/actors/aliexpress-scraper/) - [Coles, Woolworths & Aldi Price Scraper - No Login](https://cliqtomedia.com/actors/au-supermarket-prices/) - [Naver Shopping Scraper: Korea Products & Prices](https://cliqtomedia.com/actors/naver-shopping-scraper/) - [Trendyol Scraper: Products, Prices & Reviews (No login)](https://cliqtomedia.com/actors/trendyol-scraper/) - [eBay Sold Listings Scraper - Sold Prices & Dates](https://cliqtomedia.com/actors/ebay-sold-listings/) - [Etsy Listings & Shop Export (Etsy Open API v3)](https://cliqtomedia.com/actors/etsy-listings-api/) --- # 99acres and MagicBricks Property Scraper > 99acres scraper and MagicBricks scraper in one table. Get rent and sale price, price per sq ft, BHK, locality and builder. Filter by city. No login. URL: https://cliqtomedia.com/actors/india-property-listings/ Category: Real estate, travel & cars · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/india-property-listings?fpr=cliqto Get rent and sale homes from MagicBricks and 99acres in one table. Pick a city, type, BHK and budget. Compare prices across both portals. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `Bangalore` in City. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does India Property Listings Scraper reads public rent and sale listings from [MagicBricks](https://www.magicbricks.com/) and [99acres](https://www.99acres.com/) for one Indian city and returns one row per listing with price, area, BHK, locality, project, builder, amenities, photos and who listed it. - City (`city`): for example Bangalore, Mumbai, Pune, New Delhi, Gurgaon, Noida, Hyderabad, Chennai, Kolkata or Ahmedabad. Bengaluru and Gurugram work too. - Rent or buy (`listingType`): rental listings (price per month) or homes for sale (full price). - Portal (`site`): both portals (default), only MagicBricks or only 99acres. - Filters: property type, BHK and budget in INR. ### Good for - Compare rents or sale prices in one city across MagicBricks and 99acres. - Build a list of 2–3 BHK flats under a budget with area, locality and amenities. - Track new projects and builders in a city with RERA numbers and price per sq ft. ### Not a good fit - Residential homes only: apartments, builder floors, houses, villas, penthouses and studios. No plots, offices, shops or PG. - No phone numbers, e-mails or names of private owners. The Actor does not log in and does not open single listing pages. - One city per run and at most 1,000 listings per run. For more, run the Actor again with another city, BHK or budget. - Other portals (Housing.com, NoBroker, Square Yards) are not supported. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.001 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Page read | $0.005 | One portal page read: a search results page or the 99acres city page. Retries after a block are not charged. | | Saved listing | $0.0018 (from $0.0012 on paid Apify plans) | One listing saved to the Dataset. Filtered-out and repeated listings are not charged. | - One result: about $0.0028. - 1,000 results: about $1.80. - Every day 100 results, for 30 days: about $5.43 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/india-property-listings?fpr=cliqto ## Questions ### Do I need a portal account or proxy? No. It reads public results. An Indian proxy is in the price. ### Does it get plots or offices? No. It covers homes only, like flats, houses and villas. ### Can I get owner phone numbers? No. Phones, emails and owner names are not collected. ### Can I pick only one portal? Yes. Choose both, only MagicBricks or only 99acres. ### Do I need a MagicBricks or 99acres account? No. The Actor reads public search results without login. Indian residential proxy is included in the price. ### Why are some fields null? The portal did not show this value on the search result. For example, MagicBricks often gives only the carpet area, and 99acres does not give the builder name. The Actor does not guess missing values. ### Are the results complete and fresh? Each row is what the portal showed at `fetchedAt`. The portals order and limit their own results; `RUN_SUMMARY.sites[].totalOnSite` shows how many listings the portal reported. Each listing is saved once per run. ### Can I search several cities in one run? No, one city per run. Start one run per city, or call the Actor from a schedule or the API for each city. ## Data fields - `id` (string): Unique row ID: site plus the portal listing ID, e.g. magicbricks:79283231. - `site` (string): Portal the listing comes from: magicbricks or 99acres. - `listingId` (string): The portal's own listing ID. - `url` (string): Link to the listing page on the portal. - `title` (string): Listing headline as the portal shows it. - `listingType` (string): rent or buy. - `price` (number): Price in INR. For rent: per month. null when the portal shows "Price on request". - `priceText` (string): Price as the portal writes it, e.g. 1.25 Cr or 35,000. - `pricePerSqft` (number): INR per square foot, as the portal reports it. - `areaSqft` (number): The area the portal shows on the card, in sq ft. - `areaType` (string): Which area areaSqft is (e.g. Carpet Area), when the portal says so. On MagicBricks only set when the card has nothing but the carpet area. - `carpetAreaSqft` (number): Carpet area in sq ft. - `builtUpAreaSqft` (number): Built-up area in sq ft. - `superAreaSqft` (number): Super built-up area in sq ft. - `bhk` (integer): Bedrooms (BHK). null for studios when the portal gives no number. - `bathrooms` (integer): Bathrooms. - `balconies` (integer): Balconies. - `propertyType` (string): Property type as the portal names it, e.g. Apartment, Independent House, Builder Floor. - `furnishing` (string): Furnished, Semi-Furnished or Unfurnished. - `floor` (string): Floor of the unit as the portal writes it, e.g. 3, Ground or Lower Basement. - `totalFloors` (integer): Floors in the building. - `facing` (string): Direction the property faces, e.g. East. - `locality` (string): Locality or neighbourhood, e.g. Whitefield. - `city` (string): City. - `latitude` (number): Latitude, when the portal publishes it. - `longitude` (number): Longitude, when the portal publishes it. - `projectName` (string): Housing project or society name. - `builderName` (string): Builder or developer of the project (MagicBricks only). - `amenities` (array): Amenity names, e.g. Lift, Power Back Up, Swimming Pool. Empty list when none are listed. - `images` (array): Photo URLs from the search result (https). Empty list when the listing has no photos. - `listedBy` (string): Who posted the listing: owner, agent or builder. - `agencyName` (string): Agency or builder company name. Null for owners and when the portal shows what looks like a person's name: no private names. - `availability` (string): Possession or availability, e.g. Ready to Move or Immediately. - `tenantPreference` (string): Rent only: preferred tenants, e.g. Family, Single Women. - `deposit` (number): Rent only: security deposit in INR. - `maintenance` (number): Maintenance charge in INR (MagicBricks only). - `maintenancePeriod` (string): Period of the maintenance charge, e.g. Monthly. - `reraId` (string): RERA registration number, when the listing shows one. - `description` (string): Listing text, up to 2000 characters. Phone numbers and e-mails are hidden. - `postedAt` (string): When the listing was posted (ISO 8601). ## Input settings - `city` (string, required): City to search, e.g. Bangalore, Mumbai, Pune, New Delhi, Gurgaon, Noida, Hyderabad, Chennai, Kolkata or Ahmedabad. Bengaluru and Gurugram work too. - `listingType` (string): Rental listings (price per month) or properties for sale (full price). - `site` (string): Which portal to read. With both, the listings limit is split between them, and one portal fills in what the other lacks. - `maxItems` (integer): Maximum listings to save in total (across both portals). Each listing and each portal page read is charged. - `propertyType` (array): Leave empty for all homes. 99acres has no separate penthouse type: penthouses there come with apartments. - `bhk` (array): Leave empty for any. 5 means 5 BHK or more. Listings without a BHK number (some studios) are left out when this is set. - `budgetMin` (integer): Lowest price in rupees. For rent: per month (e.g. 20000). For buy: full price (e.g. 5000000 = 50 lakh). Listings without a price are left out when a budget is set. - `budgetMax` (integer): Highest price in rupees. For rent: per month (e.g. 60000). For buy: full price (e.g. 15000000 = 1.5 crore). ## Step by step on Apify 1. Open the Input tab. 2. Keep City = `Bangalore` (prefill) or type your city. 3. Keep Rent or buy = `rent` and Max listings = `20` (prefill) for a first test. 4. Click Start. 5. Open the Output tab → Listings and check `title`, `price`, `areaSqft` and `locality`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Rent price check by locality | `city`, `listingType: rent`, `bhk` | listing | `price`, `locality`, `areaSqft`, `furnishing` | Google Sheets or CSV | | Sale price per sq ft in a city | `listingType: buy` | listing | `price`, `pricePerSqft`, `carpetAreaSqft`, `locality` | BI tool via API | | New projects and builders | `listingType: buy`, `site: magicbricks` | listing | `projectName`, `builderName`, `reraId`, `availability` | CRM or spreadsheet | | Compare portals | `site: both` | listing | `site`, `price`, `locality`, `listedBy` | Dataset export | | Owner vs agent listings | any | listing | `listedBy`, `agencyName`, `deposit` | filter in a spreadsheet | ## Tips - One run covers one city. Make one task per city. - Bengaluru and Gurugram work as city names too. - Some fields are empty when the portal does not show them. The tool does not guess. ## Limits - At most 1,000 listings per run and 60 pages per portal. The test run with 1,000 listings finished in 142 s. - The default timeout is 300 s. Before the timeout the Actor stops new requests and keeps saved rows (`partial`, `TIME_LIMIT`). For 1,000 listings with narrow filters or with `site: 99acres` only (about 40 pages at a slower pace), give the run more time, for example 600 s. - With very narrow filters, a portal stops after 5 pages in a row with no matching listing, so a small number of matches can be missed deep in the results. - Values come from the search result cards. Fields that appear only on the listing page (full description, phone numbers) are not collected. - 99acres sometimes shows a check page to fast visitors. The Actor slows down and retries through another Indian IP; if a portal still does not answer, its status is `error` and the other portal's rows stay. ## Sample result ```json { "id": "99acres:93377100", "site": "99acres", "listingId": "93377100", "url": "https://www.99acres.com/2-bhk-bedroom-apartment-flat-for-rent-in-eden-park-at-the-prestige-city-sarjapur-bangalore-east-979-sqft-spid-B93377100", "title": "2 BHK Flat for rent in Sarjapur, Bangalore", "listingType": "rent", "price": 40000, "priceText": "40,000", "pricePerSqft": 40, "areaSqft": 979, "areaType": "Super Built-up Area", "carpetAreaSqft": 645, "builtUpAreaSqft": null, "superAreaSqft": 979, "bhk": 2, "bathrooms": 2, "balconies": 1, "propertyType": "Residential Apartment", "furnishing": "Semi-Furnished", "floor": "10", "totalFloors": 28, "facing": "East", "locality": "Sarjapur", "city": "Bangalore", "latitude": 12.877670671473693, "longitude": 77.7737927936145, "projectName": "Eden Park at The Prestige City", "builderName": null, "amenities": ["Corner Property", "Power Backup", "Gated Society", "Gas Pipeline", "CCTV Surveillance", "Pet Friendly"], "images": ["https://imagecdn.99acres.com/media1/40671/14/813434867M-1786265241016.jpg"], "listedBy": "agent", "agencyName": "G R Enterprises", "availability": "2026-08-09", "tenantPreference": "Single Women, Single Men, Family", "deposit": 150000, "maintenance": null, "maintenancePeriod": null, "reraId": null, "description": "Additionally, this property is in vicinity to important points of interest and is close to school, close to hospital…", "postedAt": "2026-08-09T08:40:01.000Z", "updatedAt": "2026-08-09T09:34:23.000Z", "position": 1, "searchUrl": "https://www.99acres.com/search/property/rent/residential/bangalore?city=20&preference=R&area_unit=1&res_com=R&property_type=1,2,4,90", "fetchedAt": "2026-10-14T15:01:56.707Z" } ``` ## Use it from code Actor ID: `cliqtomedia/india-property-listings` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/india-property-listings").call(run_input={ "city": "Bangalore", "listingType": "rent" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~india-property-listings/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"city": "Bangalore", "listingType": "rent"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/india-property-listings") result = tool.invoke({"run_input": {"city": "Bangalore", "listingType": "rent"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [Events Scraper: Eventbrite, Meetup & Luma — No Login](https://cliqtomedia.com/actors/events-aggregator/) - [Google Flights Scraper - Prices & Times, No Login](https://cliqtomedia.com/actors/google-flights-scraper/) - [Redfin & Realtor Listings Scraper (US): Sale, Sold & Rent](https://cliqtomedia.com/actors/us-property-listings/) --- # JazzHR jobs scraper for applytojob.com career pages > JazzHR jobs scraper for public applytojob.com pages. Get job text, pay and apply links. Compare snapshots to find new, changed and removed jobs. URL: https://cliqtomedia.com/actors/jazzhr-jobs-monitor-scraper/ Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/jazzhr-jobs-monitor-scraper?fpr=cliqto Paste a JazzHR career page or job link. You get current jobs with text, pay details and apply links. Save a snapshot and compare it next time. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `https://ecosystems.applytojob.com/apply/jobs/` in JazzHR board or job URLs. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Read public JazzHR career pages and return current jobs with descriptions, pay details and apply links. Compare full snapshots to find new, changed and removed jobs. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.08 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Saved job or change | $0.00198 | One current job or initial/new/changed/removed job event saved in the Dataset. | - One job: about $0.08. - 1,000 jobs: about $2.06. - Every day 100 jobs, for 30 days: about $8.34 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/jazzhr-jobs-monitor-scraper?fpr=cliqto ## Questions ### Do I need a JazzHR account? No. The tool reads public career pages, not recruiter accounts. ### How many links can I add? Up to 5 links and 100 saved jobs or changes per run. ### Can I get only new jobs? Yes. Use monitor mode with your last full snapshot. Keep rows marked new. ### Why is the posting date empty? Some old page themes show no date or pay. The tool leaves them empty. ### Why do the two location fields differ? `locations` uses structured data when present. `location` uses the visible page summary. A job may show a city in structured data and Remote in visible text. ### Can I replace another JazzHR scraper without changing my code? The fields `title`, `description`, `locations`, `url`, `date_posted` and `input_url` keep the common meaning. Input keys, canonical input URLs, safe HTML formatting and extra status fields can differ. Check your mapping before switching. ## Data fields - `title` (string): Public job title. - `description` (string): Safe HTML; null when disabled or missing. - `locations` (array): Structured location strings, or visible location fallback; [] when unknown. - `url` (string): Public application page URL. - `date_posted` (string): Source posting date, or null. - `input_url` (string): Canonical input URL that found the job. - `job_id` (string): Stable tenant:public-job-code identifier. - `company` (string): Public employer name, or null. - `location` (string): Visible location summary, or null. - `employment_type` (string): Source employment type; JSON-LD or visible fallback. - `description_text` (string): Plain description text; null when disabled or missing. - `salary` (object): Source pay currency/unit/min/max/value; no conversion. - `remote` (boolean): True when source marks remote, otherwise null. - `change_type` (string): Current snapshot row or initial/new/changed/removed monitor event. - `status` (string): Detail completeness; also check run-level status. - `scraped_at` (string): ISO fetch or removal-detection timestamp. - `source` (string): jazzhr platform marker. ## Input settings - `startUrls` (array, required): Add 1–5 public HTTPS tenant.applytojob.com board or job URLs. Duplicate URLs and job IDs are removed. - `maxResults` (integer): Save 1–100 jobs or change events. Default 20. A full scan can cost time even with no filter matches. A result limit can make the run partial. - `query` (string): All words must appear in title, company, locations or included description text. Empty means all jobs. Maximum 200 characters. - `includeDescription` (boolean): Return safe HTML and plain text descriptions. Default true. False reduces output size and removes description text from keyword matching. - `mode` (string): Snapshot returns current jobs. Monitor compares with previousSnapshot. Without a previous snapshot, monitor returns initial jobs. - `previousSnapshot` (object): In monitor mode, paste the complete SNAPSHOT record from the previous run. It must have the same URLs and description setting, version 1 and at most 100 complete jobs. Omit for the first run. Never use a partial run as the baseline. ## Step by step on Apify 1. Open Input. 2. Add `https://ecosystems.applytojob.com/apply/jobs/` to JazzHR board or job URLs (`startUrls`). 3. Keep `maxResults: 20`, `includeDescription: true` and `mode: "snapshot"`. 4. Use 256 MB, a 160-second timeout and a $0.30 maximum charge. Click Start. 5. Open the Dataset and check `title`, `job_id` and `url`. Open `RUN_SUMMARY` and check `status`. ## Use cases | Task | Settings | Key fields | |---|---|---| | Add public JazzHR jobs to a niche job board | `mode: "snapshot"` | `job_id`, `title`, `url`, `description_text` | | Compare a company's hiring activity | `mode: "monitor"` with a previous full snapshot | `job_id`, `change_type`, `company` | | Review roles by location or words | `query`, with descriptions enabled when needed | `locations`, `location`, `title` | ## Tips - JazzHR pages look like company.applytojob.com. Paste the board or one job link. - Keep the SNAPSHOT from a full run. Paste it into the next monitor run. - Turn off descriptions for a small, quick list of titles and links. ## Limits Employers can remove or change pages. Some old themes have no posting date or pay values. This Actor does not fill missing values with guesses. - Up to 5 input URLs and 100 saved jobs or changes per run. - A complete 78-job board was checked. A 100-row multi-board run reached result and time limits and was partial. Five single-job inputs were also checked with a complete result. - Source work is bounded by 120 scanned jobs, 150 request attempts, 100 seconds, 1 MiB per response and 20 MiB of response bodies in total. Storage and reporting can add time after the scan. The recommended timeout is 160 seconds. A 300-second Store test or larger finite positive timeout is supported without extending the 100-second source deadline. - Use 256–512 MB. Larger memory, longer timeouts and restart-on-error are rejected before source work. - Enabled descriptions are limited to 40,000 HTML characters and 30,000 plain-text characters. Clipping is marked partial. - Complete snapshots can hold up to 100 jobs. A partial run returns `SNAPSHOT: null`; keep your earlier good baseline. - Closed detail links can return `not_found`. An unknown page layout, access block or network error is reported as an error, not a successful empty board. - Partial source scans do not infer removals. Output or charge caps may limit delivery after a full scan. Read both source and run status. ## Sample result ```json { "title": "Energy Auditor", "locations": ["Remote"], "url": "https://ecosystems.applytojob.com/apply/jobs/details/0GZ4T5FOYL", "date_posted": null, "input_url": "https://ecosystems.applytojob.com/apply/jobs/", "job_id": "ecosystems:0GZ4T5FOYL", "company": "ecofi", "location": "Remote", "employment_type": "Full Time", "salary": null, "remote": true, "change_type": "current", "status": "complete", "source": "jazzhr" } ``` ## Use it from code Actor ID: `cliqtomedia/jazzhr-jobs-monitor-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/jazzhr-jobs-monitor-scraper").call(run_input={ "startUrls": [ "https://ecosystems.applytojob.com/apply/jobs/" ], "maxResults": 20 }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~jazzhr-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"startUrls": ["https://ecosystems.applytojob.com/apply/jobs/"], "maxResults": 20}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/jazzhr-jobs-monitor-scraper") result = tool.invoke({"run_input": {"startUrls": ["https://ecosystems.applytojob.com/apply/jobs/"], "maxResults": 20}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) --- # JD.com Products Scraper: Prices, Shops and Ratings > JD.com scraper: search by Chinese keyword or SKU and get price in CNY, shop, self-operated flag, review count and good rate. No login or cookies. URL: https://cliqtomedia.com/actors/jd-com-scraper/ Category: E-commerce & prices · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Type Chinese keywords or paste JD.com links and get products as rows. Each row has price in CNY, shop and review numbers. No JD login or cookies needed. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `手机` in Keywords. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Type keywords or paste JD.com (京东) product links, and get JD products as one row each: price in CNY, shop, 自营 (JD self-operated) flag, number of reviews, good rate in percent, images, categories and links. No JD login, no cookies, no API key. - Search — for each keyword, it reads JD's public search results (京东热卖, re.jd.com) page by page. One row per product: price, shop, self-operated flag, review count (`5万+`) and the same as a number (50000), good rate (`99` = 99% positive), main image, category IDs and the position in the results. - Product — for each JD product link or SKU number, it reads the public mobile product page: title, brand, shop, all images, categories and stock. Then it looks for the same SKU in JD search to add the price, review count and good rate. In our tests on real products the price was found for about 80–90% of them. JD Worldwide (京东国际, jd.hk) products work too. ### Good for - Find products by Chinese keyword and compare price, shop and review numbers. - Track prices of the same keywords over time (run on a schedule and compare by `skuId`). - Check how popular a product is: `commentsCountMin` and `goodRate` for each SKU. ### Not a good fit - About 150–200 products per keyword. JD's public search stops there; later pages repeat. For more products, add more specific keywords (`华为手机`, `小米手机`). - No review texts, no variant or specification lists, no seller ratings. These JD pages need a login. - In Product mode the price is best-effort: JD hides prices on product pages without a login, so the Actor finds the price only when the same SKU appears in JD search for its title. When it does not, the row is `partial` with title, shop and images, and `price: null`. - The order of results can differ from the JD app or search.jd.com. Prices are the ones JD shows to a visitor without an account (no member or coupon prices). ## Price Prices will be shown after release. ## Questions ### Can I get review texts? No. Review texts, specs and variants need a JD login, so they are not included. ### Why is the price empty for some links? JD hides prices on product pages. The tool finds the price only when the SKU is in search. ### Why are prices different from the JD app? The tool sees the price for a visitor without an account. Member prices, coupons and app offers are not included. ### Does it work with JD Worldwide? Yes. jd.hk products work in product mode. ### Do I need a JD account, cookies or API key? No. The Actor reads public JD pages without a login. It does not solve captchas or log in. ### Are the results complete and fresh? The rows show what JD's public search shows at `fetchedAt`. JD changes order and prices often. The Actor does not promise every product for a keyword. ## Input settings - `mode` (string): Search: products for keywords. Product: details for a list of JD product URLs or SKU numbers. - `keywords` (array): Search words, Chinese works best (for example 手机, 笔记本电脑, 耳机). Up to 20 per run. Used in Search mode. - `productUrls` (array): JD product links (https://item.jd.com/100292929859.html, item.m.jd.com links) or bare SKU numbers. Up to 50 per run. Used in Product mode. - `maxItems` (integer): How many products to save for each keyword (Search mode). JD public search lists about 150-200 products per keyword, so for more results add more specific keywords. Each saved product is one billable result. - `proxyConfiguration` (object): Apify datacenter proxy works for JD's public pages. Leave the default unless you see blocks. ## Step by step on Apify 1. Open the Input tab. 2. Keep Mode = `Search by keyword` and the prefilled keyword `手机` in Keywords, or type your own (Chinese works best). 3. Keep Max products per keyword = 10 (prefill) or raise it. 4. Click Start. 5. Open the Output tab, view Products, and check `price`, `commentsCount` and `goodRate`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Price research on JD | `keywords` | product | `price`, `shop`, `selfOperated` | Google Sheets, CSV | | Popularity and rating check | `keywords` or `productUrls` | product | `commentsCountMin`, `goodRate` | spreadsheet, BI | | Price tracking | `keywords` + schedule | product | `skuId`, `price`, `fetchedAt` | Dataset API, webhooks | | Enrich a list of SKUs | `productUrls` (mode `product`) | product | `title`, `brand`, `shop`, `images`, `inStock` | your catalog | ## Tips - Use more specific keywords for more products. JD stops at about 150 to 200 per keyword. - Compare runs by skuId to track price changes. - Split long link lists into runs of 50. ## Limits - product — each saved `complete` or `partial` product row. - Up to 20 keywords per run, up to 1,000 products per keyword (JD gives about 150–200); up to 50 product links per run. - Measured: 20 keywords × 1,000 → 3,686 rows in 200 seconds; 3 keywords → 461 rows in 27 seconds; 50 real product links → 74–89 seconds; 100 product links that do not exist → 31 seconds. For more products, split the list into runs of 50. - The default run timeout is 300 seconds. The Actor stops on its own at about 240 seconds and keeps saved rows (`reason: DEADLINE`). ## Sample result ```json { "skuId": "100298246508", "title": "一加Ace 6T 12GB+256GB 黑色 oppo 第五代骁龙 8 165Hz 超高刷电竞屏 学生游戏电竞智能手机 国家补贴", "price": 3389, "currency": "CNY", "shop": "一加手机京东自营旗舰店", "shopId": "1000001947", "selfOperated": true, "brand": null, "commentsCount": "5万+", "commentsCountMin": 50000, "goodRate": 99, "url": "https://item.jd.com/100298246508.html", "mobileUrl": "https://item.m.jd.com/product/100298246508.html", "image": "https://img14.360buyimg.com/n0/jfs/t1/426075/25/1266/29522/69ead4abF0cc818dc/0083320320f82202.jpg", "images": ["https://img14.360buyimg.com/n0/jfs/t1/426075/25/1266/29522/69ead4abF0cc818dc/0083320320f82202.jpg"], "categoryIds": ["9987", "653", "655"], "inStock": null, "keyword": "手机", "position": 1, "totalResults": 7680, "input": null, "mode": "search", "status": "complete", "error": null, "fetchedAt": "2026-10-15T09:51:01.331Z" } ``` ## Use cases with this tool - [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/): Track prices and offers in shops and marketplaces. See changes before your customers do. ## Similar tools - [Historical Exchange Rates & Currency Converter](https://cliqtomedia.com/actors/historical-fx-rates-converter/) - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) - [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/) - [AliExpress Scraper: Products, Prices & Reviews, No Login](https://cliqtomedia.com/actors/aliexpress-scraper/) - [Coles, Woolworths & Aldi Price Scraper - No Login](https://cliqtomedia.com/actors/au-supermarket-prices/) - [Idealo Price Scraper: All Shop Offers, 6 Countries, No Login](https://cliqtomedia.com/actors/idealo-price-scraper/) --- # Kick Live Streams & Viewer Count > Check live status, viewers, title, category and paid subscribers for up to 1,000 Kick channels, or top streams of a category. Your own free Kick key. URL: https://cliqtomedia.com/actors/kick-channels/ Category: Video, audio & streaming · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Paste Kick channel names or links. Get live status, viewers, title, category and paid subscribers. You can also list the top live streams of a category. You use your own free Kick key. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `xqc` in Channels. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Kick Live Streams & Viewer Count gets live status, viewer count, stream title, category, language and paid subscriber count for a list of Kick channels, or the top live streams of any Kick category. You paste channel names or kick.com links, or type a category such as *Just Chatting*, and add your own free Kick Client ID and Client Secret. You get one clean table row per channel, with numbers as numbers. - Accepts channel names (`xqc`), handles (`@adinross`) and links (`https://kick.com/xqc`). Upper and lower case do not matter. - Channel rows come in the order of your list. A channel that appears twice is looked up once. - For a category, the Actor saves the channels live in it right now, most viewers first, up to `maxItems`. A channel that is already in your list is not saved twice. - A channel that Kick does not have gets a `not_found` row with your original line. A line that is not a Kick channel name gets an `invalid_input` row. - An offline channel has `isLive: false` and `null` viewers, title and category. `null` is never written as `0`. - E-mail addresses in a channel description are replaced with `[email removed]`. The Actor does not collect contacts. ### Good for - You track a list of streamers and need to know who is live, with how many viewers, right now. - You want the biggest live streams of a category (for example *Slots & Casino* or *Just Chatting*) as a table. - You want an official, stable data source instead of page scraping. ### Not a good fit - You need follower counts. The official Kick API does not give followers, so this Actor does not have them. It gives the paid subscriber count instead. - You need clips, past broadcasts (VODs), chat messages or viewer lists. - You need e-mails or other contacts of streamers. This Actor does not collect them. - You have no Kick account with two-factor authentication. You need it to make the free key. ## Price Prices will be shown after release. ## Questions ### Do I need a Kick key? Yes. You make a free Client ID and Client Secret in your Kick account. Two-factor login must be on. ### Does it give follower counts? No. The official Kick API does not give followers. You get paid subscribers instead. ### What if a channel is offline? The row shows isLive false. Viewers, title and category are empty, not zero. ### How many channels can I check? Up to 1,000 channels and 20 categories per run. Kick gives up to 100 live streams per category. ### Do I need a Kick account? Yes, to make the free key, with two-factor authentication on. The Actor does not log in to your account and does not use cookies. ### Does it cost Kick money? No. The Kick API is free. You pay only the Apify price above. ### Can I switch from another Kick scraper without changes? Not without changes. Field names differ (for example `viewerCount`, `channelSlug`, `title`), and there are no followers. In return you get one row format for channels and categories, clear `not_found` / `invalid_input` rows and ISO UTC times. ### Is personal data included? Only public channel and stream data that Kick shows on the channel page. E-mail addresses in descriptions are removed. No viewer or chat data. ## Data fields - `status` (string): complete = all fields found; partial = saved, but Kick did not return some fields (see message); not_found = no Kick channel or category with this name (small empty-result fee); invalid_input = not a Kick channel name (small empty-result fee); api_key_required = free notice when the Client ID or Secret is missing. - `input` (string): Your channels or categories entry as typed. - `matchedBy` (string): channel = from your channels list; category = a live stream from one of your categories. - `rank` (integer): 1-based position among the category's live streams by viewers (category rows only). - `channelSlug` (string): Channel name as in kick.com/. - `userId` (integer): Kick broadcaster user id; stable even when the channel name changes. - `displayName` (string): Channel display name. - `isLive` (boolean): True when the channel is live right now. - `title` (string): Live stream title; null when offline. - `viewerCount` (integer): Current viewers; null when offline (never a made-up 0). - `category` (string): Category of the live stream, e.g. Just Chatting; null when offline. - `categoryId` (integer): Kick category id of the live stream. - `language` (string): Stream language as Kick reports it; null when offline. - `isMature` (boolean): True when the stream is marked for mature audiences. - `startedAt` (string): When the live stream started (ISO 8601, UTC). - `thumbnailUrl` (string): Live stream thumbnail image. - `description` (string): Channel description. E-mail addresses are replaced with [email removed]. - `activeSubscribers` (integer): Active paid subscribers of the channel as reported by Kick. - `profilePictureUrl` (string): Channel avatar. - `bannerPictureUrl` (string): Channel banner image. - `url` (string): https://kick.com/. - `source` (string): Always kick-public-api. - `fetchedAt` (string): When this row was fetched (ISO 8601, UTC). - `message` (string): Why a row is partial, not_found, invalid_input or api_key_required; null otherwise. ## Input settings - `clientId` (string): Client ID of your own Kick app from kick.com → Settings → Developer. Stored encrypted; never written to the dataset, logs or run summary. - `clientSecret` (string): Client Secret of the same app. Stored encrypted; the app token made from it is revoked at the end of the run. - `channels` (array): Kick channel names, @handles or kick.com links, up to 1000. Each one gets a row: live status and channel stats, or a not_found / invalid_input row explaining why there is none (charged as a small empty result). - `categories` (array): Optional: Kick category names (e.g. Just Chatting, Slots & Casino) or numeric category ids, up to 20. For each one the Actor saves the channels live in it right now, most viewers first. Can be combined with the channels list. - `maxItems` (integer): Save up to this many live streams from each category, most viewers first (Kick returns at most 100). Does not limit the channels list. Each saved channel is one paid result. ## Step by step on Apify 1. Get a key (see above). 2. Paste your Client ID and Client Secret. 3. The Channels field already has `xqc`. Add more names or links, one per line, or add a category in Categories. 4. Click Start. A few channels take about 3 seconds. 5. Open the Channels view of the dataset, or download it as CSV, Excel or JSON. ## Use cases | Task | Input | Key fields | Next step | |---|---|---|---| | Check which of your streamers are live | the creators' channel names | `isLive`, `viewerCount`, `title`, `category` | Alert your team or update a dashboard | | Find top streamers of a category for a campaign | `categories`, `maxItems: 100` | `rank`, `viewerCount`, `language`, `activeSubscribers` | Shortlist channels of the right size and language | | Track viewers over time | the same list every 15 minutes or every hour | `viewerCount`, `fetchedAt`, `userId` | Chart peak and average viewers in a sheet | | Clean a creator list | a list from a sheet or CRM | `status`, `channelSlug`, `url` | Remove renamed or banned channels | | Enrich data for BI or a model | many channels | all fields | Join on `userId` | ## Tips - Paste names, @handles or kick.com links. Each form works. - Add a category like Just Chatting to see the most watched channels. - Run it on a schedule to build a history of viewer counts. ## Limits Data comes from the Kick Public API under your own Kick app. Please follow the Kick Developer Terms. This Actor is not affiliated with or endorsed by Kick. - Up to 1,000 lines in `channels` and up to 20 categories with up to 100 live streams each per run. We tested both at once: 1,449 rows saved in about 118 seconds (the other category streams were already in the channel list). - Kick gives at most 100 live streams per category, most viewers first. - Kick marks its old live streams endpoint (the only one sorted by viewers) as deprecated. If Kick turns it off, the Actor switches by itself to the newer endpoint, reads all live streams of the category and sorts them by viewers. Results stay the same; a big category takes a few more requests. - If Kick says "too many requests" and the limit does not come back after about 45 seconds of waiting, the Actor keeps the saved rows and ends as `PARTIAL` with reason `QUOTA_LIMIT`. The run still SUCCEEDED. Run again a few minutes later, or split the list. - The Actor stops looking up channels 15 seconds before the run timeout so it can save the results. It keeps the saved rows and ends as `PARTIAL` with reason `TIME_LIMIT`. The default timeout of 300 seconds is enough for the maximum input. - If Kick fails again and again, the run keeps saved rows and ends with reason `SOURCE_ERROR`. - `isLive` and `viewerCount` are live at `fetchedAt` and change all the time. - No follower counts: the official Kick Public API does not give them. ## Sample result ```json { "status": "complete", "input": "Just Chatting", "matchedBy": "category", "rank": 1, "channelSlug": "absi", "userId": 27894320, "displayName": "Absi", "isLive": true, "title": "مين ضيف اليوم", "viewerCount": 18942, "category": "Just Chatting", "categoryId": 15, "language": "ar", "isMature": false, "startedAt": "2026-10-22T08:59:29.000Z", "thumbnailUrl": "https://images.kick.com/video_thumbnails/IUNVIedvenl6/4RMUEbHHHebd/480.webp", "description": null, "activeSubscribers": 1593, "profilePictureUrl": "https://files.kick.com/images/user/27894320/profile_image/conversion/951102c4-68da-415c-a344-d6dbaec3fb05-medium.webp", "bannerPictureUrl": null, "url": "https://kick.com/absi", "source": "kick-public-api", "fetchedAt": "2026-10-22T10:31:40.720Z", "message": null } ``` ## Similar tools - [YouTube Search Results Scraper — No Login](https://cliqtomedia.com/actors/youtube-search-scraper/) - [Bluesky Scraper — Posts, Profiles, Feeds & Threads, No Login](https://cliqtomedia.com/actors/bluesky-scraper/) - [Threads Scraper — Posts, Profiles, Replies & Search](https://cliqtomedia.com/actors/threads-scraper/) - [YouTube Subtitles & Transcript Scraper API](https://cliqtomedia.com/actors/youtube-transcript-scraper/) - [YouTube Comments Scraper](https://cliqtomedia.com/actors/youtube-comments-scraper/) - [Apple Podcast Directory & RSS Contacts Scraper](https://cliqtomedia.com/actors/podcast-directory-rss-contacts-scraper/) --- # Kleinanzeigen scraper for listings, prices and photos > Kleinanzeigen scraper for listings by keyword, city or ZIP, radius, category and price. Get price, text, photos and seller type. No login. URL: https://cliqtomedia.com/actors/kleinanzeigen-scraper/ Category: Classifieds & second-hand · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/kleinanzeigen-scraper?fpr=cliqto Type what you look for, like a sofa or a bike, and a city. You get a table of Kleinanzeigen listings with price, place and photos. You can download it as an Excel file. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `fahrrad` in Search terms. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Scrape classified ads from [Kleinanzeigen.de](https://www.kleinanzeigen.de/), Germany's biggest classifieds site, by keyword, city or postal code, radius, category, price and seller type. Each row has the title, price and price type (fixed, VB or free), place and postal code, posting date, full description, all photos, private or commercial seller, shipping and the listing's attributes. No login, cookies or account. A 20-listing search costs $0.0305 on the Free plan. - Keyword: one search per keyword, such as `fahrrad`, `iphone 13` or `sofa`. Write keywords in German, as buyers do. - Location: a German city, district or 5-digit postal code, such as `Berlin`, `München` or `10115`, plus a radius from 5 to 200 km. - Category: 154 Kleinanzeigen categories, such as Autos, Fahrräder & Zubehör, Mietwohnungen or Smartphones. - Price: minimum and maximum in euros. - Seller type: private people or commercial sellers (shops and dealers). - Kleinanzeigen URLs: paste a search URL to use its own filters, or listing URLs to refresh single listings. ### Good for - Track prices of used bikes, phones, furniture or cars in one city. - Get new listings for a search every hour or every day with `onlyNew`. - Compare private and commercial sellers in a category. - Check if listings you saved earlier are still online (listing URLs). ### Not a good fit - Seller names, phone numbers or e-mails. They are not collected, and phone numbers or e-mails typed into the text are masked (numbers written out in words are not detected). - Other classifieds sites, or listings outside Germany. - More than 1,250 listings for one search. Kleinanzeigen shows at most 50 pages of 25 listings. Split a big search by price, city or category to get more. - Sorting other than newest first (for keyword searches). ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.002 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Search lookup | $0.0005 | One search read on Kleinanzeigen (charged after its first result page), or one requested listing URL that no longer exists. | | Listing | $0.0014 (from $0.00119 on paid Apify plans) | One Kleinanzeigen listing saved to the dataset. Duplicates, listings already seen in only-new mode and not_found rows are not charged as listings. | - One listing: about $0.0039. - 1,000 listings: about $1.40. - Every day 100 listings, for 30 days: about $4.27 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/kleinanzeigen-scraper?fpr=cliqto ## Questions ### Do I need a Kleinanzeigen account or proxy? No. The tool reads public search and listing pages. ### Can I get the seller's phone number? No. Seller names and contacts are not collected. Use the listing link. ### Can I search the whole of Germany? Yes. Leave the location empty. ### How many listings can one search return? Up to 1,250 per search. That is the site's own limit. ### Is it allowed? Looking at public ads to compare prices is the normal use of this tool. It reads only ads that anyone can see without an account, like in a browser, only faster. Do not use the data to write to people or to copy their photos or texts for your own ads. If you use the data for a business, read the Kleinanzeigen terms first. ### How do I get price history? Each run gives the current listings. Schedule the same input and keep the datasets, or put the listing URLs in `startUrls`. Use `id` to follow one listing over time; `originalPrice` shows the price before the last price drop. ## Data fields - `id` (string): Kleinanzeigen listing ID (Anzeigen-ID), stable across runs. - `url` (string): Listing URL on www.kleinanzeigen.de. - `title` (string): Listing title. Phone numbers and e-mails in it are masked. - `price` (number): Price in euros; 0 for free items (Zu verschenken); null when the seller gave no price. - `priceType` (string): fixed, negotiable (VB) or free (Zu verschenken). - `originalPrice` (number): Earlier price shown crossed out after a price drop; null otherwise. - `currency` (string): Always EUR. - `location` (string): Place as shown on the listing, e.g. Berlin - Mitte. - `postalCode` (string): German postal code of the listing. - `latitude` (number): Approximate latitude from the listing page (area, not exact address). - `longitude` (number): Approximate longitude from the listing page (area, not exact address). - `postedAt` (string): Posting time: ISO date-time with Berlin offset for today and yesterday, otherwise the date (YYYY-MM-DD). - `description` (string): Full description from the listing page, or the short teaser when details are off or unavailable. Phone numbers and e-mails in it are masked. - `images` (array): Photo URLs in gallery order. - `imageCount` (integer): Number of photos the listing has. - `sellerType` (string): private or commercial seller. Seller names and contacts are never collected. - `shipping` (boolean): true when shipping is offered (Versand möglich), false for pickup only. - `buyNow` (boolean): true when the listing offers Direkt kaufen (buy with the site's payment); null for listing URLs. - `isTopAd` (boolean): true for paid TOP ads (only when Include paid TOP ads is on); null for listing URLs. - `categoryId` (integer): Kleinanzeigen category ID of the listing. - `categoryName` (string): German category name. - `attributes` (object): Listing attributes from the detail table, e.g. Art, Typ, Zustand. - `detailLevel` (string): full when the listing page was read, card when fields come from the result list only. - `status` (string): complete; partial when the listing page could not be read (card fields only); not_found when a listing no longer exists (never charged as a listing). - `statusReason` (string): Plain-English reason for partial and not_found rows; null when complete. - `searchQuery` (string): Search term that found the listing; null for URL inputs and keyword-less searches. - `searchUrl` (string): Canonical Kleinanzeigen search URL that found the listing. - `rank` (integer): Position among saved listings of that search (1 = newest). - `source` (string): Always kleinanzeigen.de. - `fetchedAt` (string): When the row was scraped (ISO 8601, UTC). ## Input settings - `queries` (array): What to search for, e.g. fahrrad, iphone 13 or sofa. Each term is a separate search with the filters below. Up to 20 terms, each up to 100 characters. Leave empty to browse a location or category without a keyword. - `location` (string): German city, district or 5-digit postal code, e.g. Berlin, München or 10115. Resolved the same way as the site's location box. Leave empty for all of Germany. - `radiusKm` (string): Search radius around the location. 0 means only the place itself. Needs a location. - `category` (string): Optional category: the ID (217), the URL slug (fahrraeder) or the German name (Fahrräder & Zubehör), as in a Kleinanzeigen category URL such as /s-fahrraeder/c217. Leave empty for all categories. - `priceMin` (integer): Only listings priced at least this many euros. Leave empty for no minimum. - `priceMax` (integer): Only listings priced at most this many euros. Leave empty for no maximum. - `sellerType` (string): Only private sellers, only commercial sellers (shops and dealers), or both. - `maxItems` (integer): Stop each search after this many listings. Kleinanzeigen shows at most 50 pages of 25 listings (1,250) per search; split by price or location to get more. You pay per listing saved, plus a small fee per search. - `startUrls` (array): Optional. Paste search result URLs (https://www.kleinanzeigen.de/s-…) to scrape them with their own filters and sort order, or listing URLs (https://www.kleinanzeigen.de/s-anzeige/…) to refresh single listings. Up to 100 URLs. Deleted listings come back as not_found rows (small lookup fee, not the listing price). - `includeDetails` (boolean): On: opens every listing page for the full description, all photos, exact location, attributes and seller type. Off: faster, fields come only from the result list (short description, one photo). - `includeTopAds` (boolean): TOP ads are paid placements that repeat on many pages and are not sorted by date. Off by default. - `onlyNew` (boolean): Skip listings already delivered by an earlier run with the same search, and stop paging once a whole page is already known. Search URLs from startUrls are read newest first in this mode. Use with an Apify schedule for new-listing alerts. The seen IDs (up to 5,000) are kept in a key-value store named kleinanzeigen-scraper-seen in your account. - `stateKey` (string): Optional name for the only-new memory, e.g. berlin-bikes. Runs with the same name share one memory even if the search changes. Default: derived from the search settings. Lowercase letters, digits and dashes. - `proxyConfiguration` (object): Optional, usually not needed: the Actor connects directly and pauses briefly if Kleinanzeigen pushes back. Only your own proxy URLs are supported (Apify Proxy is not). ## Step by step on Apify 1. Open the Input tab. 2. Keep Search terms as `fahrrad` and Location as `Berlin` (the prefill). 3. Keep Max listings per search at `20`. 4. Click Start. 5. Open the Listings view of the dataset. Check `title`, `price`, `location` and `postedAt`. ## Use cases | Task | Input | Key fields | Next step | |---|---|---|---| | Watch used bike or phone prices in a city | `queries`, `location`, `radiusKm`, `priceMin`, `priceMax` | `price`, `priceType`, `attributes`, `location` | Sort by price in a spreadsheet | | Get new deals as soon as they appear | `queries` + `location` + `onlyNew: true` | `title`, `price`, `url`, `postedAt` | Schedule the run every hour | | Rental market report | `category: wohnung-mieten`, `location`, `radiusKm` | `price`, `attributes`, `postalCode`, `latitude`, `longitude` | Group by `postalCode` | | Find shops and dealers in a category | `category` + `sellerType: commercial` | `title`, `price`, `location`, `shipping` | Count listings per place | | Check if saved listings still exist | `startUrls` with listing URLs | `status`, `statusReason`, `price` | Remove sold listings from your list | ## Tips - Write keywords in German, like fahrrad or sofa, as buyers do. - Paste a Kleinanzeigen search URL to reuse its own filters. - Use originalPrice to spot listings with a recent price drop. ## Limits Data comes from the public search and listing pages of Kleinanzeigen.de. The Kleinanzeigen terms limit automated access and reuse of its content. You are responsible for checking that your use of the data is allowed. This Actor is an independent tool. It is not made by or endorsed by Kleinanzeigen. - Search results. Kleinanzeigen decides which listings match a keyword and a place. The Actor does not promise every listing on the site. - 1,250 per search. The site shows at most 50 pages of 25 listings. When a search has more, `RUN_SUMMARY` says so; split it by price range, city or category. - Dates. The site shows the time only for today and yesterday. Older listings have the date only. - TOP ads. Paid TOP ads are skipped by default, because they repeat on every page and are not new. - Privacy. Seller names, user IDs, phone numbers and the legal notice (Impressum) are never collected. Phone numbers and e-mails typed into the title or text are replaced with `[phone removed]` / `[email removed]`. Masking is automatic: a number written out in words or digit by digit can stay in the text. - Changes. If Kleinanzeigen changes its website, a run can fail with `SOURCE_ERROR` until the Actor is updated. ## Sample result ```json { "id": "3540986756", "url": "https://www.kleinanzeigen.de/s-anzeige/damenfahrrad-cityrad-schwarz-mit-korb/3540986756-217-3529", "title": "Damenfahrrad Cityrad schwarz mit Korb", "price": 100, "priceType": "negotiable", "originalPrice": null, "currency": "EUR", "location": "14169 Berlin - Zehlendorf", "postalCode": "14169", "latitude": 52.4424884, "longitude": 13.264024, "postedAt": "2026-10-14T17:57:00+02:00", "description": "Ich verkaufe mein zuverlässiges Cityrad für Damen in klassischem Schwarz. Es ist ein ideales Fahrrad für den täglichen Weg durch die Stadt oder zum Einkaufen. …", "images": [ "https://img.kleinanzeigen.de/api/v1/prod-ads/images/db/db4c5738-d020-4987-a595-4c687f2de989?rule=$_59.AUTO", "https://img.kleinanzeigen.de/api/v1/prod-ads/images/f6/f65b85e8-c647-492f-9355-dd31c3ee853d?rule=$_59.AUTO" ], "imageCount": 6, "sellerType": "private", "shipping": false, "buyNow": false, "isTopAd": false, "categoryId": 217, "categoryName": "Fahrräder & Zubehör", "attributes": { "Art": "Damen", "Typ": "Cityräder", "Zustand": "Gut" }, "detailLevel": "full", "status": "complete", "statusReason": null, "searchQuery": "fahrrad", "searchUrl": "https://www.kleinanzeigen.de/s-berlin/sortierung:neuste/fahrrad/k0l3331", "rank": 1, "source": "kleinanzeigen.de", "fetchedAt": "2026-10-14T15:58:03.899Z" } ``` ## Use it from code Actor ID: `cliqtomedia/kleinanzeigen-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/kleinanzeigen-scraper").call(run_input={ "queries": [ "fahrrad" ], "location": "Berlin" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~kleinanzeigen-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"queries": ["fahrrad"], "location": "Berlin"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/kleinanzeigen-scraper") result = tool.invoke({"run_input": {"queries": ["fahrrad"], "location": "Berlin"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [AutoScout24 Scraper - EU Car Listings & Prices, No login](https://cliqtomedia.com/actors/car-listings-scraper/) - [Depop Scraper - Listings, Prices, Brands & Shops](https://cliqtomedia.com/actors/depop-scraper/) - [OLX Listings Scraper: Poland, Ukraine, Romania & More](https://cliqtomedia.com/actors/olx-listings-scraper/) - [Subito.it Scraper - Italy Classifieds & Prices, No Login](https://cliqtomedia.com/actors/subito-listings-scraper/) - [Craigslist Scraper - Listings, Prices & Photos, No Login](https://cliqtomedia.com/actors/craigslist-scraper/) - [Vinted Scraper - Listings, Prices & Brands in 25 Countries](https://cliqtomedia.com/actors/vinted-scraper/) --- # Bulk LEI lookup and change monitor with GLEIF data > LEI lookup for up to 1,000 codes or search by company name in GLEIF data. Get legal name, status, renewal date and parent. See changes between runs. URL: https://cliqtomedia.com/actors/lei-gleif-lookup/ Category: Leads, companies & validation · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Paste LEI codes or a company name. You get legal name, status, renewal date and parent company from GLEIF. Run it again to see only what changed. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `HWUPKR0MPOU8FGXBT394` in LEI codes. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does LEI Lookup & Change Monitor checks Legal Entity Identifiers (LEI) in the public GLEIF data. Add up to 1,000 LEI codes, or search by legal name. You get one row per entity with the legal name, jurisdiction, legal form, entity status and registration status, renewal date, addresses, the issuer (LOU) and the direct and ultimate parent or the reporting exception. It can also show what changed since your last run. - LEI lookup. Each LEI is an exact match. The Actor checks the ISO 17442 check digits first. A code with wrong check digits gets an `error` row (`INVALID_LEI`) and no request. A valid code that GLEIF does not know gets a `not_found` row. No input is lost. - Name search. GLEIF searches the words in legal names and other names (trade, previous and transliterated names). The Actor reads up to 200 candidates, puts exact and close name matches first and returns `maxResults` rows. You can filter by country and registration status. ### Good for - Check the LEI of a counterparty, supplier or fund before onboarding or a trade report. - Find LEIs that lapsed or must be renewed soon (`registrationStatus`, `daysUntilRenewal`). - Find the LEI of a company when you only know its name. - See the parent company, or the reason the entity gives for not reporting one. - Watch a list of LEIs and get only the changes on each run. ### Not a good fit - This is reference data, not a counterparty approval. The Actor never says that an entity is safe, approved or risky. - A missing LEI is not a risk signal. Many legal entities do not need an LEI. - `LAPSED` means the LEI registration was not renewed on time. It does not mean that the company was dissolved. Read `entityStatus` for that. - A reporting exception is not proof that the entity has no parent. It is the reason the entity gave for not reporting one. - No children list, no full ownership tree, no ISIN, BIC or other code mappings, and no bulk Golden Copy download. ## Price Prices will be shown after release. ## Questions ### Do I need a GLEIF account? No. GLEIF data is open. You only need an Apify account. ### Does LAPSED mean the company closed? No. The LEI was not renewed on time. Check entityStatus for closure. ### Does it tell me if a company is safe? No. It gives reference data. Your own policy decides what it means. ### How many LEIs can I check? Up to 1,000 per run. In a test, this took about 20 seconds. ### Why are some parents shown as an exception and not as a company? Entities report their parents to their LEI issuer. When they do not, they give a reason, like `NATURAL_PERSONS` (owned by people) or `NON_CONSOLIDATING`. The Actor shows that reason. It does not guess a parent. ### How fresh is the data? Each run reads GLEIF live. `goldenCopyDate` is the date of the GLEIF data, and `fetchedAt` is when the Actor read it. ### What licence does the data have? GLEIF publishes LEI data under the CC0 1.0 licence. Read the GLEIF terms of use for your case. Do not use the GLEIF name or logo in a way that suggests a link with GLEIF. ## Data fields - `status` (string): complete = record found (with parents if requested); partial = record found but some parent details are missing; not_found = valid LEI with no GLEIF record; error = invalid LEI (no request sent) or source failure. - `statusReason` (string): Why the row is not complete, in plain words. - `errorCode` (string): INVALID_LEI, SOURCE_UNAVAILABLE, SOURCE_TIMEOUT, RATE_LIMITED, DEADLINE_REACHED, ... for error rows. - `input` (string): The LEI as you entered it, or the search text for search rows. - `inputType` (string): lei = from the LEI list; search = from the name search. - `searchQuery` (string): Name search text for search rows. - `searchRank` (integer): Position in the name search results (1 = first). - `lei` (string): Legal Entity Identifier (ISO 17442), upper case. - `checksumValid` (boolean): True when the LEI has 20 valid characters and its ISO 17442 check digits match. - `legalName` (string): Legal name as registered. - `legalNameLanguage` (string): Language code of the legal name. - `otherNames` (array): Other and transliterated names with their type (e.g. TRADING_OR_OPERATING_NAME, PREVIOUS_LEGAL_NAME, AUTO_ASCII_TRANSLITERATED_LEGAL_NAME). - `jurisdiction` (string): Legal jurisdiction, ISO country or subdivision code (e.g. US-CA, DE). - `legalFormCode` (string): ISO 20275 Entity Legal Form (ELF) code, e.g. 6QQB. - `legalFormOther` (string): Legal form as free text when no ELF code applies. - `entityCategory` (string): GENERAL, BRANCH, FUND, SOLE_PROPRIETOR, RESIDENT_GOVERNMENT_ENTITY or INTERNATIONAL_ORGANIZATION. - `entitySubCategory` (string): Entity sub-category when published. - `entityStatus` (string): Status of the legal entity: ACTIVE or INACTIVE; null when GLEIF publishes none (e.g. annulled records). Separate from registrationStatus. - `entityCreationDate` (string): Date the entity was legally formed. - `entityExpirationDate` (string): Date the entity ceased to exist, if published. - `entityExpirationReason` (string): DISSOLVED, CORPORATE_ACTION or OTHER, if published. - `successorLei` (string): LEI of the successor entity after a merger or other corporate action. - `successorName` (string): Name of the successor entity. - `registrationStatus` (string): Status of the LEI registration: ISSUED, LAPSED (not renewed on time; does not mean the entity was dissolved), RETIRED, MERGED, ANNULLED, DUPLICATE, PENDING_TRANSFER, PENDING_ARCHIVAL, TRANSFERRED or CANCELLED. - `initialRegistrationDate` (string): When the LEI was first issued. - `lastUpdateDate` (string): Last update of the LEI record. - `nextRenewalDate` (string): Date the registration must be renewed by. - `daysUntilRenewal` (integer): Days from the run date to nextRenewalDate; negative = overdue. - `managingLou` (string): LEI of the Local Operating Unit (LEI issuer) that manages the record. - `corroborationLevel` (string): How the LOU verified the data: FULLY_CORROBORATED, PARTIALLY_CORROBORATED, ENTITY_SUPPLIED_ONLY. - `registeredAt` (string): Registration authority ID (GLEIF RA list code, e.g. RA000665). - `registeredAs` (string): Entity ID in that business register. - `legalAddressLines` (array): Legal address street lines. - `legalCity` (string): Legal address city. - `legalRegion` (string): Legal address region (ISO 3166-2). - `legalPostalCode` (string): Legal address postal code. - `legalCountry` (string): Legal address country (ISO 3166-1 alpha-2). - `hqAddressLines` (array): Headquarters address street lines. - `hqCity` (string): Headquarters city. - `hqRegion` (string): Headquarters region. ## Input settings - `leis` (array): Up to 1,000 Legal Entity Identifiers (20 characters, e.g. HWUPKR0MPOU8FGXBT394). Lower case, spaces and duplicates are cleaned up; you can also paste several codes separated by commas or new lines into one entry. Codes with wrong check digits get an error row without any request. Leave empty to search by name only. - `legalName` (string): Optional. Finds entities whose legal name or other (trade, previous, transliterated) name contains this text, e.g. Deutsche Bank. Can be combined with LEI codes; LEIs already in the list are not repeated. - `country` (string): Optional two-letter ISO country code of the legal address for the name search, e.g. DE, US, GB. - `registrationStatus` (string): Optional filter for the name search. ISSUED = current registration; LAPSED = not renewed on time (the entity may still be active). - `maxResults` (integer): Maximum entities returned by the name search (1–200). Default 10. - `includeParents` (boolean): Adds the direct and ultimate accounting-consolidation parent (LEI, name, country, registration status) or, when the entity reported none, the reporting exception reason (e.g. NATURAL_PERSONS, NON_CONSOLIDATING). A reporting exception is not proof that no parent exists. Default true. - `monitorKey` (string): Optional name, 1–40 letters, digits or dashes, e.g. supplier-watchlist. The Actor stores what it saw under this key in your account; the next run with the same key marks each LEI new, updated (with the changed fields and previous values), unchanged or no_longer_found. The first run marks rows initial. - `previousDatasetId` (string): Optional ID of a dataset from an earlier run of this Actor. LEIs are marked new, updated or unchanged against it. Use either this or monitorKey. - `onlyChanges` (boolean): When comparing (monitorKey or previousDatasetId), skip unchanged LEI records so you only see changes. A skipped unchanged LEI costs the cheap LEI check event, not a full record. Not-found and error rows are always written. Default true. Has no effect without a comparison. ## Step by step on Apify 1. Open the Input tab. The form already has three LEIs: Apple Inc., Microsoft Corporation and Deutsche Bank AG. 2. Click Start. 3. Open the Overview view in the Output tab. Check `legalName`, `registrationStatus`, `entityStatus` and `nextRenewalDate`. 4. Replace the codes with your own list (up to 1,000), or clear the list and type a name in `legalName`. ## Use cases | Task | Input | You get | Key fields | |---|---|---|---| | Check counterparty LEIs (KYC, onboarding) | `leis` | one row per LEI | `status`, `registrationStatus`, `entityStatus`, `legalName`, `jurisdiction` | | Find lapsed or soon-to-expire LEIs | `leis` | one row per LEI | `registrationStatus`, `nextRenewalDate`, `daysUntilRenewal`, `managingLou` | | Find an LEI by company name | `legalName` + `country` | ranked rows | `searchRank`, `lei`, `legalName`, `legalCity`, `registrationStatus` | | See the parent company | `leis` + `includeParents` | Ownership view | `directParentType`, `directParentName`, `ultimateParentName`, `ultimateParentExceptionReason` | | Watch a list for changes | `leis` + `monitorKey` | Changes view | `changeType`, `changedFields`, `previousValues` | ## Tips - Sort by daysUntilRenewal to find codes that need action first. - Add a country code to a name search to get closer matches. - Always check legalName and lei before you trust a search result. ## Limits - Up to 1,000 LEIs per run. In our test, 1,000 LEIs took about 20 seconds with parents. - Name search: up to 200 candidates are read and ranked; `maxResults` up to 200. If GLEIF has more matches, `RUN_SUMMARY.search.truncated` is `true`. Add `country`, `registrationStatus` or a longer name. - The name search matches words. Symbols, HTML or very short words give unrelated results. Always check `legalName` and `lei` before you use a search result. - The Actor sends at most one request per second to GLEIF, and stops source work after 240 seconds. - Data is as fresh as the GLEIF API, which follows the daily Golden Copy. `goldenCopyDate` shows the publish date. ## Sample result ```json { "status": "complete", "lei": "2549008YU9EOMHFUA249", "checksumValid": true, "legalName": "APPLE OPERATIONS INDIA PRIVATE LIMITED", "jurisdiction": "IN", "legalFormCode": "YSP9", "entityStatus": "ACTIVE", "registrationStatus": "ISSUED", "nextRenewalDate": "2027-05-25T14:07:19Z", "managingLou": "5493001KJTIIGC8Y1R12", "legalCity": "Bangalore", "legalCountry": "IN", "directParentType": "parent", "directParentLei": "HWUPKR0MPOU8FGXBT394", "directParentName": "Apple Inc.", "directParentCountry": "US", "directParentExceptionReason": null, "ultimateParentType": "parent", "ultimateParentLei": "HWUPKR0MPOU8FGXBT394", "ultimateParentName": "Apple Inc.", "changeType": null, "gleifRecordUrl": "https://search.gleif.org/#/record/2549008YU9EOMHFUA249", "goldenCopyDate": "2026-10-12T00:00:00Z" } ``` ## Use cases with this tool - [Lead lists from public data](https://cliqtomedia.com/actors/use-cases/lead-generation/): Build lists of companies and contacts from public sites. Check emails and phones before you send. ## Similar tools - [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/) - [Bulk Email Verifier: MX, Disposable, Role & Typo Check](https://cliqtomedia.com/actors/email-verifier/) - [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/) - [EU VAT Number Validator (VIES) - Bulk Check, No Login](https://cliqtomedia.com/actors/vat-number-validator/) - [Europages Scraper: B2B Suppliers & Certificates (No Login)](https://cliqtomedia.com/actors/europages-companies-scraper/) - [France Company & SIRET Search](https://cliqtomedia.com/actors/france-sirene-company-search/) --- # Lever jobs scraper for public company boards > Lever jobs scraper for public boards. Add a company slug, board URL or job URL. Get one row per job with filters. No Lever account. JSON or CSV. URL: https://cliqtomedia.com/actors/lever-jobs-scraper/ Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/lever-jobs-scraper?fpr=cliqto Add a Lever company name or board link. You get each published job once, with a stable ID. Global and EU boards both work. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `leverdemo` in Lever boards or job URLs. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Lever job scraper for current published jobs from the public Lever boards you provide. Add a board slug, board URL, or one exact job URL. Get one row per unique job, ready for recruiting market research or job listings export. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Unique job result | $0.0003 | One unique useful job row saved to the default Dataset. | | Start fee | $0.002 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | - One job: about $0.0023. - 1,000 jobs: about $0.30. - Every day 100 jobs, for 30 days: about $0.96 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/lever-jobs-scraper?fpr=cliqto ## Questions ### Do I need a Lever account or API key? No. The tool reads public published postings through the Lever Postings API. ### Can I search jobs across every Lever company? No. You must give known boards. There is no company search. ### Can I get one single job? Yes. Paste the exact job URL. You get that job if it is still public. ### Does a second run show only new jobs? No. Each run returns the current jobs. Compare IDs in your own system. ### Can I get EU jobs or one job URL? Yes. Use an EU hosted board/job URL for EU mode. An exact posting URL returns that job if it remains public. ### Does a repeat run return only new jobs? No. It returns a fresh snapshot. Duplicate jobs are removed within a run, not across runs. ### Can descriptions or locations be missing? Yes. The source controls those fields. Check nulls, empty arrays and `includeContent`; do not treat missing fields as guessed values. ## Data fields - `id` (string): Stable ID: lever:{region}:{board}:{postingId}. - `source` (string): The public source name. - `idRuleVersion` (string): Version of the stable identifier rule. - `region` (string): Global or EU public Lever instance. - `boardSlug` (string): Normalized public Lever site slug. - `boardUrl` (string): Canonical public hosted board URL. - `sourceJobId` (string): Upstream Lever posting ID. - `title` (string): Published job title. - `location` (string): Primary source location, when present. - `locations` (array): Source location values. - `department` (string): Source department, when present. - `team` (string): Source team, when present. - `commitment` (string): Source commitment, when present. - `country` (string): Source ISO-2 country, when present. - `workplaceType` (string): Source workplace type or unspecified. - `openingHtml` (string): Source opening HTML when content is included. - `openingText` (string): Plain opening text when content is included. - `descriptionHtml` (string): Source combined description HTML. - `descriptionText` (string): Plain combined description. - `descriptionBodyHtml` (string): Source body HTML. - `descriptionBodyText` (string): Plain body text. - `lists` (array): Source list sections with title, HTML and text. - `additionalHtml` (string): Source additional HTML. - `additionalText` (string): Plain additional text. - `salaryRange` (object): Source salary range when provided. - `salaryDescriptionHtml` (string): Source salary note HTML. - `salaryDescriptionText` (string): Plain salary note. - `hostedUrl` (string): Canonical public job page. - `applyUrl` (string): Source application URL; never submitted by the Actor. - `createdAt` (string): Source creation time in ISO format. - `observedAt` (string): Time this Actor observed the row. ## Input settings - `targets` (array, required): Use a board slug such as leverdemo, a public Lever board URL, or one exact public job URL. Bare slugs use the global Lever service. - `includeContent` (boolean): Keep the public HTML/plain job content and list sections in each result. - `filters` (object): All filled filter groups must match. Values within one group use OR logic. - `maxJobsPerTarget` (integer): Stop each board after this many useful results. Use 0 for no per-board cap. - `maxTotalJobs` (integer): Maximum number of unique job rows saved in one run. - `pageSize` (integer): Use the complete board response when 0. A positive value uses Lever skip/limit pages. - `continueOnError` (boolean): Process independent targets after a technical failure and report a partial run. ## Step by step on Apify 1. Open the Input tab. 2. Keep the filled `targets` example, `leverdemo`, or enter your public Lever board URL. 3. Keep Include descriptions and lists on for the full content. 4. Click Start. 5. Open the default Dataset. Check `sourceJobId`, `title`, `hostedUrl` and `descriptionText` in the first row. 6. Open Key-value store → RUN_SUMMARY to check the target status and counts. ## Use cases | Task | Input | Key fields | Next step | |---|---|---|---| | Export company job listings | Board slugs in `targets` | `sourceJobId`, `title`, `hostedUrl`, `applyUrl` | Export Dataset as JSON or CSV | | Study hiring by team or place | `filters.teams`, `filters.locationIncludes` | `team`, `department`, `locations`, `commitment` | Group rows in your own sheet | | Save public job content | `includeContent: true` | `descriptionHtml`, `descriptionText`, `lists` | Use the content in your own pipeline | | Recheck a known posting | Exact job URL in `targets` | Stable `id`, `observedAt`, source fields | Compare snapshots in your own system | ## Tips - The slug is the name in jobs.lever.co/name. Use an EU link for EU boards. - Turn on continue after error when you check many boards in one run. - Store job IDs yourself to spot new jobs. Each run is a fresh snapshot. ## Sample result ```json { "id": "lever:global:leverdemo:ad208490-4052-4f91-a57e-433f2d1e484b", "sourceJobId": "ad208490-4052-4f91-a57e-433f2d1e484b", "boardSlug": "leverdemo", "title": "Customer Success Manager", "location": "Atlanta, Georgia", "locations": [ "Atlanta, Georgia" ], "department": "Customer Success", "team": "Customer Success Team", "commitment": "Regular Full Time (Salary)", "workplaceType": "hybrid", "hostedUrl": "https://jobs.lever.co/leverdemo/ad208490-4052-4f91-a57e-433f2d1e484b", "applyUrl": "https://jobs.lever.co/leverdemo/ad208490-4052-4f91-a57e-433f2d1e484b/apply" } ``` ## Use it from code Actor ID: `cliqtomedia/lever-jobs-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/lever-jobs-scraper").call(run_input={ "targets": [ "leverdemo" ], "includeContent": True }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~lever-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"targets": ["leverdemo"], "includeContent": true}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/lever-jobs-scraper") result = tool.invoke({"run_input": {"targets": ["leverdemo"], "includeContent": True}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Reach out when the company is ready](https://cliqtomedia.com/actors/use-cases/buying-signals/): Know when a company hires, raises money or wins a contract. Reach out at the right moment. - [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/): See what your competitors launch, hire, change and advertise. Every week, without opening their sites. ## Similar tools - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) - [BambooHR Jobs Monitor & Scraper](https://cliqtomedia.com/actors/bamboohr-jobs-monitor-scraper/) --- # LLM Web Data Extractor > Turn public web pages into JSON with your own OpenAI, Anthropic or Gemini key. List the fields you want or give a JSON Schema. One row per page. URL: https://cliqtomedia.com/actors/llm-web-extractor/ Category: AI-ready content & documents · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Give page links and the fields you want. The Actor reads each page and asks an AI model for the values. You get one JSON row per page. You use your own API key. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `https://apify.com/pricing` in Page URLs. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Turn public web pages into structured JSON with your own OpenAI, Anthropic or Google Gemini API key: give page URLs and the fields you want, and get one row per page with the values and the tokens your key used. - Values that are not on the page come back as `null`. The model is told never to guess. - List mode returns every record on a page (all plans, all products, all people) in `data.items`. ### Good for - The same fields (name, price, date, contact page, specs) from pages on many different sites. - Pricing tables, product pages, team pages, event pages, job posts: anything readable in the page HTML. - Teams that already have an OpenAI or Gemini key and want to pay their provider directly for tokens. ### Not a good fit - Pages that build their content with JavaScript. They are reported as `JS_REQUIRED` and no model call is made. - Pages behind a login, paywall or bot protection. The Actor never logs in and never bypasses them; HTTP 401/403 pages are errors. - Crawling a whole site. The Actor reads only the URLs you give (up to 300 per run). It does not follow links. - Guaranteed accuracy. LLMs can make mistakes; check important values. ## Price Prices will be shown after release. ## Questions ### Do I need my own API key? Yes. Use a key from Google Gemini, OpenAI or Anthropic. Your provider bills the tokens. ### Is Anthropic tested? Not yet with a live key. It follows the public API docs. Gemini and OpenAI are tested. ### Does it work on pages that need JavaScript? No. Those pages are marked JS_REQUIRED and no model call is made. ### What if a value is not on the page? It comes back as null. The model is told not to guess. ### Is Anthropic supported? The Anthropic option follows the public API docs, but Anthropic: not tested with a live key yet. Gemini and OpenAI are tested. ### Are the values always correct? No guarantee: LLMs can make mistakes. The model sees only the page text, is told to use `null` instead of guessing, and treats the page as untrusted data. Check important values. ### How fresh is the data? Each page is downloaded during the run; `fetchedAt` shows when. Nothing is cached. ## Data fields - `url` (string): Page URL from the input. - `finalUrl` (string): URL after redirects; null when the page was not downloaded. - `status` (string): complete = data extracted; not_found = HTTP 404/410, or the model found none of the requested data (error.code NO_DATA, only the $0.001 page read charged); error = see error.code; skipped = not processed (quota, budget, timeout); api_key_required / api_key_invalid = key problem, nothing processed. - `data` (object): Extracted fields. Values not on the page are null. In list mode the records are in data.items. null unless status is complete or not_found with NO_DATA (then it holds the empty answer). - `provider` (string): gemini, openai or anthropic. - `model` (string): Model id used. - `inputTokens` (integer): Prompt tokens the provider billed to your key for this page. null when no model call was made. - `outputTokens` (integer): Output tokens billed to your key, including reasoning or thinking tokens. - `reasoningTokens` (integer): Part of outputTokens spent on reasoning, when the provider reports it. - `pageTitle` (string): Page title. - `pageChars` (integer): Characters of clean page text before any cut. - `truncated` (boolean): True when the page text was cut to maxPageChars before it was sent. - `fetchedAt` (string): When the row was written, ISO 8601. - `error` (object): Why the row is not complete: code (e.g. QUOTA_EXCEEDED, JS_REQUIRED, HTTP_ERROR, LLM_TRUNCATED) and a short message. null for complete rows. ## Input settings - `urls` (array, required): Public pages to read (up to 300 per run; 300 pages take about 18 minutes on a free Gemini key, so raise the run timeout). One model call per page. Pages behind a login or paywall, private and internal addresses are not read. Pages that render only with JavaScript are reported as JS_REQUIRED without a model call. - `fields` (array): Field name on the left, a short description for the model on the right. Add a type after a colon: price:number, count:integer, in_stock:boolean, tags:array (text by default). Missing values come back as null. Ignored when a JSON Schema is given. - `mode` (string): One record: the fields describe the page itself (an article, a product). List: the page holds many records (plans, products, people) and you get them all in data.items. - `provider` (string): Whose API your key belongs to. Gemini has a free tier in Google AI Studio. Anthropic support is built to the public API docs but not yet tested with a live key. - `apiKey` (string): Your own key for the provider above. Required: without it the run stops at once with a hint and nothing is charged for extraction. The provider bills the tokens to this key. The key is stored encrypted, used for this run only and never written to logs or results. Gemini: aistudio.google.com/apikey · OpenAI: platform.openai.com/api-keys · Anthropic: console.anthropic.com/settings/keys - `model` (string): Model id from your provider. Empty = a fast, low-cost default: gemini-flash-lite-latest, gpt-5.4-mini or claude-haiku-5-5. Reasoning models are slower and use more tokens. - `jsonSchema` (object): Instead of fields, paste a JSON Schema whose root is an object with properties. It replaces the fields above. OpenAI uses strict mode only when every object lists all its properties as required and sets additionalProperties to false. - `instructions` (string): Optional hints for the model, up to 4000 characters. Example: give prices as numbers in USD; skip enterprise plans. - `maxPageChars` (integer): Page text longer than this is cut before it is sent, to cap the tokens your key pays for (about 4 characters per token). The row says when a page was cut. - `maxConcurrency` (integer): Parallel pages. Lower it if your key has a small rate limit (for example a free tier). - `keepBoilerplate` (boolean): Send the whole page, including menus, headers and footers. Off by default to save tokens. ## Step by step on Apify 1. Open the Input tab. The form is prefilled with `https://apify.com/pricing` and two fields: `plan_name` and `monthly_price`, in list mode. 2. Keep LLM provider = Google Gemini (default) or pick OpenAI. 3. Paste your key into Your API key. 4. Click Start. 5. Open the Output tab and check `status` and `data.items`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Compare competitor pricing | `urls` + `fields`, `mode: list` | one row per pricing page | `data.items`, `status`, `fetchedAt` | Google Sheets, CSV export | | Product specs from many shops | `urls` + `jsonSchema` | one row per product page | `data`, `truncated`, `status` | Dataset API, webhook to your database | | Company facts from About pages | `urls` + `fields` | one row per company page | `data`, `pageTitle`, `finalUrl` | CRM import via Make or Zapier | | Track token use per page | any | one row per page | `inputTokens`, `outputTokens`, `model` | your cost report | ## Tips - Use list mode when a page has many records, like a pricing table. - Limit page text to keep token costs low. - Check important values. AI models can make mistakes. ## Limits - Max total charge (Apify run option): when the next page would go over it, the run stops, marks the rest `skipped` / `CHARGE_LIMIT` and ends `PARTIAL`. The model is not called for a page that cannot be charged. - No data at the start: if the model finds none of your fields on 10 pages before any page had data, the run stops with `PARTIAL` / `NO_DATA_STREAK` to save your tokens. - Dead sites or provider: after 10 timeouts or connection/model errors in a row, or when no page finishes for 120 s, the run stops with `PARTIAL` / `SOURCE_FAILING` and marks the rest `skipped`. - Up to 300 URLs per run. Default timeout 300 s, memory 1 GB. - Server HTML only, no JavaScript rendering, no login, no paywall or bot-protection bypass. Private and internal addresses are blocked. - Pages up to 5 MB of HTML; text sent to the model up to `maxPageChars`. - Each request to a site identifies itself as `llm-web-extractor-apify-actor`. ## Sample result ```json { "url": "https://apify.com/pricing", "finalUrl": "https://apify.com/pricing", "status": "complete", "data": { "items": [ { "plan_name": "Free", "monthly_price": "$0" }, { "plan_name": "Starter", "monthly_price": "$19" }, { "plan_name": "Scale", "monthly_price": "$199" }, { "plan_name": "Business", "monthly_price": "$999" } ] }, "provider": "gemini", "model": "gemini-flash-lite-latest", "inputTokens": 4906, "outputTokens": 121, "reasoningTokens": 0, "pageTitle": "Apify pricing - flexible plan + pay as you go · Apify", "pageChars": 28144, "truncated": false, "fetchedAt": "2026-10-22T05:50:56.165Z", "error": null } ``` ## Similar tools - [RSS & Atom Feed Reader / Monitor](https://cliqtomedia.com/actors/rss-atom-feed-reader-monitor/) - [WordPress Posts & Pages Scraper](https://cliqtomedia.com/actors/wordpress-posts-pages-scraper/) - [News Article Extractor: RSS, URLs & Clean Text](https://cliqtomedia.com/actors/news-article-extractor/) - [PDF & Image to Text OCR for AI Agents - No Login](https://cliqtomedia.com/actors/pdf-text-ocr/) - [RAG Web Search: Google Results as Clean Markdown](https://cliqtomedia.com/actors/rag-web-search/) - [Website Screenshot & PDF Generator: Full Page & Mobile](https://cliqtomedia.com/actors/website-screenshot-pdf/) --- # Manatal jobs scraper for careers-page.com boards > Manatal jobs scraper for public careers-page.com boards. Get full job text and apply links. Compare snapshots to track new, changed and removed jobs. URL: https://cliqtomedia.com/actors/manatal-jobs-monitor-scraper/ Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/manatal-jobs-monitor-scraper?fpr=cliqto Add a Manatal board name or link. You get open jobs with full text and apply links. Monitor mode shows new, changed and removed jobs since your last full run. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `manatal` in Career board slugs or URLs. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Get public Manatal jobs from known careers-page.com boards. Read full job descriptions and apply links, or track job changes between complete snapshots. Start with `{"tenants":["manatal"]}`. Pricing is $0.04 per run plus $0.0045 per saved job row; empty and unchanged runs pay only the start fee. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.04 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Job record saved | $0.0045 | One unique current job or detected job change saved to the Dataset. | - One job: about $0.04. - 1,000 jobs: about $4.54. - Every day 100 jobs, for 30 days: about $14.70 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/manatal-jobs-monitor-scraper?fpr=cliqto ## Questions ### How many boards can I check? Up to 3 known boards and 315 jobs per run. ### Do empty runs cost money? Only the start fee. No row fee is charged when nothing is saved. ### Can I use a single job link? No. Use a board name like manatal or the full board URL. ### Does the title filter make the scan smaller? No. The tool reads the full board first, then filters titles. ## Data fields - `tenant` (string) - `company_name` (string) - `source_platform` (string) - `source_job_id` (string) - `source_numeric_id` (integer) - `title` (string) - `department` (string) - `location` (string) - `city` (string) - `state` (string) - `country` (string) - `is_remote` (boolean) - `employment_type` (string) - `url` (string) - `apply_url` (string) - `posted_at` (string) - `source_url` (string) - `record_type` (string) - `source` (string) - `observed_at` (string) - `description_html` (string) - `description_text` (string) - `content_hash` (string) - `change_type` (string) ## Input settings - `tenants` (array, required): Add 1–3 known public Manatal boards. Use a slug such as manatal or a full HTTPS careers-page.com board URL. Job URLs are not supported. Repeated boards count once. - `mode` (string): Scrape returns current jobs. Monitor returns baseline jobs on the first run, then only new, changed and removed jobs. - `previousRunId` (string): Optional for monitor. Copy the 17-character run ID from this Actor. The previous run must succeed, have a complete snapshot, and use the same boards. Omit to start a baseline. - `maxResults` (integer): Return 1–315 rows. All source jobs are read before this limit. A capped result is partial and cannot be used as a new monitor baseline. - `titleContains` (string): Optional literal text, up to 100 characters. Case is ignored. The filter runs after the full scan and change check. Empty means all titles. ## Step by step on Apify 1. Open Input and add `manatal` to Career board slugs or URLs. 2. Keep `mode` as `scrape` and `maxResults` as `315`. 3. Set a maximum cost of at least $0.20 for this example. 4. Click Start. 5. Open Output and the Dataset. Check `title`, `source_job_id` and `description_text`. 6. Check `OUTPUT.status` and each board status before using the results. ## Use cases | Task | Mode | Key fields | |---|---|---| | Build an export for known company boards | scrape | title, description_text, url | | Check hiring signals | monitor | tenant, change_type, observed_at | | Follow job edits | monitor | source_job_id, content_hash, description_text | | Track agency job lists | scrape | company_name, department, location | ## Tips - Start monitor mode without a run ID. The first run becomes your baseline. - Copy the run ID of a complete run. Use it in the next monitor run. - Clean the HTML in job texts before you show them on your site. ## Limits A source list can change while pages are read. Count changes, missing pages and conflicting duplicates prevent a complete snapshot. Equal-count source changes during a scan may remain undetected: the source does not offer an atomic snapshot. A page size or deadline failure also prevents a valid monitor baseline. Job descriptions are public source text and can include HTML; sanitize it before displaying it in your own website. - Up to 3 known boards and 315 source jobs in total per run. Live checks covered 315 jobs from 3 boards. - 256 MB memory and a 90-second internal source deadline. A separate 120-second process limit also bounds initialization, storage and shutdown. A forced stop can leave missing terminal records; check run status. - At most 20 HTTP attempts, 2 retries per temporary failure, 2 MiB per response and 8 MiB total response data. - All boards are read before output filtering. More source jobs can hit the scan limit even if the filter matches none. - `complete`: all boards and matching output are complete. An empty successful board uses this status. - `partial`: a board, source page, output limit or charge limit stopped a full result. Check the board reasons. - `not_found`: the requested board returned 404. The run fails if all boards are missing. - `error`: invalid input, source, snapshot or storage failure. It does not mean there are no jobs. ## Sample result ```json { "tenant": "manatal", "company_name": "Manatal Co LTD", "source_job_id": "L8597V4V", "title": "Business Development Internship (12PM - 9PM)", "department": "Customer Success", "location": "Bangkok, Bangkok, Thailand", "employment_type": "full_time", "url": "https://www.careers-page.com/manatal/job/L8597V4V", "apply_url": "https://www.careers-page.com/manatal/job/L8597V4V/apply", "change_type": "current" } ``` ## Use it from code Actor ID: `cliqtomedia/manatal-jobs-monitor-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/manatal-jobs-monitor-scraper").call(run_input={ "tenants": [ "manatal" ], "mode": "scrape" }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~manatal-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"tenants": ["manatal"], "mode": "scrape"}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/manatal-jobs-monitor-scraper") result = tool.invoke({"run_input": {"tenants": ["manatal"], "mode": "scrape"}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Similar tools - [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/) - [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/) - [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/) - [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/) - [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/) - [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/) --- # Marketplace Seller Fee Calculator for 21 US Platforms > Marketplace fee calculator for Etsy, eBay, Amazon, Poshmark and 17 more US platforms: fee lines, net payout, profit, margin and break-even price. URL: https://cliqtomedia.com/actors/marketplace-fee-calculator/ Category: E-commerce & prices · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Enter a sale price and item cost. See every fee line, your payout, profit and break-even price. Compare up to 21 US platforms in one run. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `etsy` in Platforms. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Calculate seller fees, payout, profit and break-even price for Etsy, eBay, Amazon, Poshmark, Mercari, TikTok Shop and 15 more US marketplaces and payment platforms. Fee rates come from the open SellersCalc fee data (CC BY 4.0), with every fee line shown separately. - every fee line with its rate and dollar amount (transaction, payment processing, listing, referral, FBA and other fees); - total seller fees and your net payout; - profit and margin when you give your item cost; - the break-even price and, if you ask, the lowest price for your target margin; - costs that are not included (sales tax, returns, ads, subscriptions, currency conversion), so you never read them as zero. ### Good for - Price a product so that it still makes money after Etsy, eBay or Amazon fees. - Compare the same sale on 5–20 platforms in one run and see where you keep more. - Get a clean fee table for your own spreadsheet, repricer or AI agent. ### Not a good fit - US fee schedules in USD only. Other countries and currencies return a `not_supported` row, not guessed fees. - One standard rate per platform. Category rates, seller levels, Amazon FBA size tiers and promotions are not modeled. - Amazon always includes the single published FBA fee. For merchant-fulfilled orders add `amazon.fbaFee` to `excludeFeeKeys`. - Sales tax, returns, ads, subscriptions, storage and currency conversion are listed in `notIncluded`, not calculated. - Rates are as last reviewed by SellersCalc (`scheduleLastReviewed`). This is not a legal or accounting guarantee; check the platform page in `officialSource` before big decisions. ## Price Prices will be shown after release. ## Questions ### Do I need a seller account? No. It uses open SellersCalc fee data, not your account. ### Are taxes and returns included? No. They are listed as not included, so you never read them as zero. ### Does it work outside the US? No. It uses US fees in USD. Other countries get a not_supported row. ### Are category fees used? No. It uses one standard rate per platform. ### Do I need an account on Etsy, eBay or Amazon? No. The Actor uses open fee data. It does not log in and does not read your shop. ### How fresh are the fees? Each row has `scheduleLastReviewed`, the date SellersCalc last checked the rates. The Actor reads the data on every run. Platforms can change fees at any time; check `officialSource` for the platform page. ### Why is my break-even price one cent different from another calculator? The Actor finds the lowest price in whole cents that gives profit ≥ 0, using fee amounts rounded to cents, as shown in `fees[]`. Some calculators use unrounded rates. ## Data fields - `type` (string): calculation = one sale scenario on one platform (mode calculate); fee = one line of a fee schedule (mode export). - `status` (string): complete; partial = a fee rule could not be applied (see warnings); not_supported = unknown platform, country or currency (one row per platform or per scenario); invalid = the scenario failed validation (one row per scenario). Only complete and partial rows are charged; at most 10 free rows per run are written, the rest are listed in RUN_SUMMARY.skipped. - `message` (string): Plain-English reason for partial, not_supported and invalid rows; null when complete. - `scenarioIndex` (integer): Position of the scenario in your input list, starting at 0; null on a not_supported row for a whole platform. - `scenarioId` (string): Your optional scenario id/label. - `platform` (string): Platform id, e.g. etsy, ebay, amazon, poshmark; null on an invalid row for a whole scenario. - `platformName` (string): Platform display name from the fee data. - `platformKind` (string): marketplace or payments. - `country` (string): Fee schedule country (ISO 2-letter). - `currency` (string): Fee schedule currency; all money fields are in it. - `salePrice` (number): Item price paid by the buyer, from your input. - `shippingCharged` (number): Shipping the buyer paid you, from your input. - `orderTotal` (number): salePrice + shippingCharged; the base for percentage fees. - `itemCost` (number): Your cost of goods, from your input; null if not given. - `shippingCost` (number): Your shipping/label cost, from your input (default 0). - `totalCosts` (number): itemCost + shippingCost; null when itemCost is missing. - `totalSellerFees` (number): Sum of fees the seller pays for this order. - `totalBuyerFees` (number): Fees the platform charges the buyer on top (e.g. Vinted buyer protection); not deducted from the seller. - `buyerPays` (number): orderTotal + totalBuyerFees, before tax. - `netPayout` (number): orderTotal - totalSellerFees: what the platform pays out. - `profit` (number): netPayout - totalCosts; null when itemCost is missing. - `marginPercent` (number): profit / orderTotal x 100; null when itemCost is missing or orderTotal is 0. - `effectiveFeeRatePercent` (number): totalSellerFees / orderTotal x 100; null when orderTotal is 0. - `breakEvenSalePrice` (number): Lowest salePrice (same shipping and costs) with profit >= 0; null without itemCost or if none exists. - `targetMarginPercent` (number): Target margin from input, if any. - `targetSalePrice` (number): Lowest salePrice that reaches targetMarginPercent; null if not requested or not reachable. - `fees` (array): Every fee line of the schedule with status applied, limit, not_applicable, not_included or excluded, the rate or fixed amount, the base and the charged amount. - `notIncluded` (array): Costs this calculation does not cover (storage, taxes, refunds, ads...) with reasons. Never read them as zero. - `assumptions` (array): Assumptions used for this row, in plain English. - `warnings` (array): Rules that could not be applied or targets that cannot be reached. - `scheduleLastReviewed` (string): Date SellersCalc last reviewed this platform's rates (not the date the rates took effect). - `officialSource` (string): Official fee page of the platform, when the fee data lists one. - `officialSourceNote` (string): Note about the official source. - `calculatorUrl` (string): SellersCalc calculator page for this platform/fee. - `source` (object): Provider, data URL, fetchedAt, license (CC BY 4.0) and attribution text. - `feeKey` (string): Fee line key in the source data (export mode). - `feeName` (string): Fee line name (export mode). - `role` (string): charge, threshold, minimum or cap (export mode). - `payer` (string): seller or buyer (export mode). - `basis` (string): Basis such as per unit or per cubic foot per month; null = per order (export mode). ## Input settings - `mode` (string): calculate = fees, payout, profit and break-even price for your sale scenarios. export = the fee table lines of the chosen platforms (all platforms if none chosen). - `platforms` (array): One or more platform ids: etsy, ebay, amazon, walmart, tiktok-shop, facebook-marketplace, mercari, poshmark, depop, vinted, grailed, goat, stockx, whatnot, reverb, offerup, gumroad, paypal, stripe, square, shopify. Each scenario is calculated on every listed platform (one row each), so you can compare platforms in one run. Up to 25. - `country` (string): 2-letter country of the fee schedule. The open fee data currently covers the US only (USD); other countries return a not_supported row instead of guessed fees. - `scenarios` (array): Up to 100 sales, each an object: salePrice (required, item price paid by the buyer), shippingCharged (shipping the buyer paid you, default 0), itemCost (your cost of goods; needed for profit, margin and break-even), shippingCost (your label cost, default 0), currency (optional; must match the schedule, e.g. USD), id (optional label). Amounts are before sales tax. - `targetMarginPercent` (integer): Optional. Also return the lowest sale price that reaches this profit margin (profit / order total), 0–95. - `excludeFeeKeys` (array): Optional fee keys to leave out, e.g. etsy.listingFee or ebay.fixedFee (see the export mode for keys). Excluded lines are shown with status excluded. ## Step by step on Apify 1. Open the Input tab. 2. Keep the prefilled example: platform `etsy` and three sales in `scenarios`. 3. Click Start. 4. Open the Calculations view of the Dataset and check `totalSellerFees`, `netPayout` and `profit`. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Price one product for a margin | `scenarios`, `targetMarginPercent` | calculation row | `profit`, `marginPercent`, `breakEvenSalePrice`, `targetSalePrice` | spreadsheet, repricer | | Compare platforms for the same sale | `platforms` (several), `scenarios` | one row per platform | `platform`, `totalSellerFees`, `netPayout`, `effectiveFeeRatePercent` | BI table, dashboard | | Check a whole catalog | `scenarios` (up to 100) | one row per product and platform | `scenarioId`, `fees[]`, `profit` | Google Sheets, CSV | | Keep a fee table | `mode` = `export` | fee row | `feeKey`, `value`, `unit`, `minimumAmount`, `capAmount` | your own calculator | | Answer a fee question in an AI agent | prefill input via MCP | calculation row | `fees[]`, `netPayout`, `notIncluded` | AI chat, agent | ## Tips - Add your item cost. Then you also get profit and margin. - Set a target margin to get the lowest price that reaches it. - For Amazon orders you ship yourself, exclude the FBA fee. ## Limits - `not_supported` and `invalid` rows are free. - A run with no useful rows (`NO_RESULTS`) costs only the start event. - A run that stops on an input error or a source error costs only the start event and saves no rows. - Up to 100 sales and 25 platform names per run. 21 platforms are supported, so at most 2,100 charged rows plus up to 10 free rows. A full run took a few seconds in our tests. - One request to the fee data per run. - If Apify moves a run to another server, the run continues where it stopped: rows are not written or charged twice. - Default timeout 300 seconds, memory 256 MB. ## Sample result ```json { "type": "calculation", "status": "complete", "scenarioIndex": 0, "scenarioId": "mug", "platform": "etsy", "platformName": "Etsy", "country": "US", "currency": "USD", "salePrice": 25, "shippingCharged": 5, "orderTotal": 30, "itemCost": 8, "shippingCost": 4.5, "totalCosts": 12.5, "totalSellerFees": 3.3, "netPayout": 26.7, "profit": 14.2, "marginPercent": 47.33, "effectiveFeeRatePercent": 11, "breakEvenSalePrice": 9.31, "targetSalePrice": null, "fees": [ { "key": "transactionPct", "name": "Transaction fee", "ratePercent": 6.5, "amount": 1.95, "status": "applied" }, { "key": "paymentPct", "name": "Payment processing", "ratePercent": 3, "amount": 0.9, "status": "applied" }, { "key": "paymentFixed", "name": "Payment fixed fee", "fixedAmount": 0.25, "amount": 0.25, "status": "applied" }, { "key": "listingFee", "name": "Listing fee", "fixedAmount": 0.2, "amount": 0.2, "status": "applied" } ], "notIncluded": [{ "item": "sales_tax", "reason": "Sales tax and fees charged on tax are not in the fee data; amounts exclude tax." }], "scheduleLastReviewed": "2026-08-15", "officialSource": "https://www.etsy.com/legal/fees", "source": { "provider": "SellersCalc", "license": "CC BY 4.0", "attribution": "Fee data by SellersCalc (https://www.sellerscalc.com)" } } ``` ## Use cases with this tool - [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/): Track prices and offers in shops and marketplaces. See changes before your customers do. ## Similar tools - [AliExpress Scraper: Products, Prices & Reviews, No Login](https://cliqtomedia.com/actors/aliexpress-scraper/) - [Coles, Woolworths & Aldi Price Scraper - No Login](https://cliqtomedia.com/actors/au-supermarket-prices/) - [Idealo Price Scraper: All Shop Offers, 6 Countries, No Login](https://cliqtomedia.com/actors/idealo-price-scraper/) - [Naver Shopping Scraper: Korea Products & Prices](https://cliqtomedia.com/actors/naver-shopping-scraper/) - [Trendyol Scraper: Products, Prices & Reviews (No login)](https://cliqtomedia.com/actors/trendyol-scraper/) - [eBay Sold Listings Scraper - Sold Prices & Dates](https://cliqtomedia.com/actors/ebay-sold-listings/) --- # Medium Article Scraper > Medium scraper: get the latest stories by tag, author or publication with title, date, tags, reading time and open text. No login. Export to CSV. URL: https://cliqtomedia.com/actors/medium-articles-scraper/ Category: Social media & communities · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/medium-articles-scraper?fpr=cliqto Get the newest Medium stories by tag, author or publication. Each row has the title, date, tags and the text of open stories. No login is needed. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `artificial-intelligence` in Tags. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Medium Article Scraper reads the latest Medium stories by tag, author, publication or story URL. It returns title, author, publication, date, tags, member-only flag, reading time and the full text of open stories. No login, cookies or API key. The example run saves 10 stories about AI in about 5 seconds and costs **$0.093** on the Free tier. - tag — topic tags, such as `artificial-intelligence` or `Machine Learning`; - author — usernames or profile links, such as `@ev` or `ev.medium.com`; - publication — publication names or links, such as `towards-data-science`; - article — story links. The Actor finds each story in its author or publication feed. ### Good for - Watch new stories on a topic, an author or a publication every day. - Collect story metadata and open text for research, newsletters or AI tools. - Check if a story is member-only before you share or analyze it. ### Not a good fit - Full author archives or search by keyword. RSS gives only the latest 10 stories. - Claps, responses, followers or view counts. RSS does not have them. - Text of member-only stories. The Actor does not log in and does not bypass the paywall; you get a preview flag only. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.003 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Saved story | $0.009 (from $0.0075 on paid Apify plans) | One Medium story saved as a Dataset row. Duplicates, onlyNew skips and not-found items are not charged. | - One result: about $0.01. - 1,000 results: about $9.00. - Every day 100 results, for 30 days: about $27.09 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/medium-articles-scraper?fpr=cliqto ## Questions ### Can I get older stories? No. Each feed shows only the 10 latest stories. A schedule helps you collect more over time. ### Does it show claps or views? No. Medium RSS does not have claps, responses or views. ### Can I read member-only stories? No. You get a member-only flag, but not the paid text. ### How many feeds can I read in one run? Up to 20 feeds per run. ### Do I need a Medium account? No. The Actor reads public RSS feeds. It does not log in and does not use cookies. ### Can I get claps or responses? No. Medium RSS does not include them, and the Actor reads only RSS. ### Why is a story missing in article mode? The story is not among the 10 latest of its author or publication feed. `RUN_SUMMARY.articles` shows `not_in_feed`. ## Data fields - `id` (string): Medium story ID (12 hex characters), from the feed guid medium.com/p/. - `url` (string): Story URL without tracking parameters. - `title` (string): Story title. - `subtitle` (string): Feed snippet: the subtitle or first line. Null when the feed has full text instead. - `authorName` (string): Author display name from the feed. - `authorUsername` (string): Medium username when the URL or feed shows it. - `authorUrl` (string): Author profile URL, if the username is known. - `publicationSlug` (string): Publication slug, such as towards-data-science. Null for personal stories. - `publicationName` (string): Publication name, when read from a publication feed. - `publicationUrl` (string): Publication URL. - `publishedAt` (string): ISO time of publication. - `updatedAt` (string): ISO time of the last update reported by the feed. - `tags` (array): Story tags (feed categories). Can be empty. - `isMemberOnly` (boolean): true: member-only story, the feed has only a preview. false: open story. null: unknown (tag feeds without includeContent, or story not in the author/publication feed). - `contentAvailability` (string): full, preview_member_only, not_requested or unknown. - `wordCount` (integer): Words in the full feed text. Null when there is no full text. - `readingTimeMin` (number): Estimated reading time in minutes (Medium method: 265 words per minute plus image time). Estimate, not the value shown on Medium. - `imageUrl` (string): First image URL. - `contentText` (string): Plain text with paragraph breaks. Only with includeContent and open stories. - `contentHtml` (string): Story HTML as published in the feed. Only with includeContent and open stories. - `sourceType` (string): Feed type the row came from: tag, author or publication. - `sourceValue` (string): Tag, username or publication slug from your input. - `feedUrl` (string): Medium RSS feed URL that was read. - `fetchedAt` (string): ISO time when the feed was read. ## Input settings - `mode` (string, required): Which list to read. Only the list for this mode is used. - `tags` (array): Tag slugs or names, such as artificial-intelligence or "Machine Learning", or medium.com/tag/... URLs. Each tag gives up to 10 latest stories. Up to 20 tags per run: Medium allows about 25 feed reads per IP. - `authors` (array): Usernames (ev or @ev) or profile URLs (medium.com/@ev, ev.medium.com). Each author gives up to 10 latest stories. Up to 20 per run. - `publications` (array): Publication slugs (towards-data-science, gitconnected) or medium.com URLs. For a custom domain, use the slug. Each gives up to 10 latest stories. Up to 20 per run. - `articleUrls` (array): Story URLs on medium.com or *.medium.com. Found only if the story is among the 10 latest in its author or publication feed. Up to 20 different authors or publications per run. - `maxItems` (integer): Maximum rows for the whole run. Every row is a charged result. - `includeContent` (boolean): Add text and HTML of open stories. Member-only stories stay previews. In tag mode it also reads author or publication feeds while the per-run request budget allows; other rows keep contentAvailability unknown. - `onlyNew` (boolean): Skip stories that earlier runs with the same memory name already returned. For scheduled runs. - `stateKey` (string): Name of the memory used by "Only new articles". Use different names for different watch lists. ## Step by step on Apify 1. Open Input. 2. Keep the example: Mode `tag`, Tags `artificial-intelligence`, Max items `20`. 3. Click Start. 4. Open Articles in the output. Check `title`, `authorName`, `publishedAt` and `tags`. ## Use cases | Goal | Input | Key fields | Next step | |---|---|---|---| | Topic monitoring | `tags` + `onlyNew` on a schedule | `title`, `url`, `publishedAt`, `tags` | Send new rows to Slack, email or a sheet. | | Content research | `publications` + `includeContent` | `contentText`, `wordCount`, `readingTimeMin` | Feed open text to an LLM or a search index. | | Author tracking | `authors` | `title`, `publishedAt`, `isMemberOnly` | Keep a list of new posts by people you follow. | | Link check | `articleUrls` | `isMemberOnly`, `contentAvailability` | See if a story is open before you share it. | ## Tips - Run it on a schedule with only-new on to build your own history. - Use author or publication mode to get full text more often. - Do not start two big runs at the same time; Medium may slow them. ## Limits - 10 stories per feed. Medium RSS has no paging. A run cannot go deeper than the 10 latest stories. - 20 feeds per run. Medium allows about 25 feed reads in a short time from one IP address. After that it answers HTTP 429 for 10 minutes or more. The Actor does not try to go around this limit. - Medium limit during a run. If Medium answers 429, the Actor stops reading. It keeps the rows saved so far and ends `SUCCEEDED` with `status: "partial"` and `errorCode: "RATE_LIMITED"`. Feeds not read get `skipped`. If no row was saved, the run is `FAILED` with `RATE_LIMITED`. Runs that start at the same time can share this limit, so a big run right after another big run can stop early. - Text in tag mode. A tag feed has only a snippet. With `includeContent`, the Actor reads the author or publication feed of each story to get the text, but only while the per-run request budget allows. Other rows keep `contentAvailability: "unknown"`. For reliable full text, use `author` or `publication` mode. - Member-only stories. Only the preview. `isMemberOnly: true`, no text. - Time. A run stops reading after 4 minutes (or 10 seconds before its timeout) and ends `partial` with `DEADLINE`. - Feed failure. If a feed fails after retries, the run is `FAILED` with `SOURCE_ERROR`, but saved rows stay in the Dataset. ## Sample result ```json { "id": "aac387e10cb6", "url": "https://medium.com/data-science/deep-dive-into-websockets-and-their-role-in-client-server-communication-aac387e10cb6", "title": "Deep Dive into WebSockets and Their Role in Client-Server Communication", "subtitle": null, "authorName": "clara", "authorUsername": null, "authorUrl": null, "publicationSlug": "towards-data-science", "publicationName": "TDS Archive", "publicationUrl": "https://medium.com/data-science", "publishedAt": "2025-02-03T11:02:00.000Z", "updatedAt": "2025-02-03T11:02:00.167Z", "tags": ["software-development", "system-design-concepts", "websocket", "client-server-model", "getting-started"], "isMemberOnly": false, "contentAvailability": "full", "wordCount": 1837, "readingTimeMin": 7.6, "imageUrl": "https://cdn-images-1.medium.com/max/1024/1*HzsgZYLeeRwRNm5gbwQWrg.jpeg", "contentText": "…", "contentHtml": "…", "sourceType": "publication", "sourceValue": "towards-data-science", "feedUrl": "https://medium.com/feed/towards-data-science", "fetchedAt": "2026-10-15T00:20:38.167Z" } ``` ## Use it from code Actor ID: `cliqtomedia/medium-articles-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/medium-articles-scraper").call(run_input={ "mode": "tag", "tags": [ "artificial-intelligence" ] }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~medium-articles-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"mode": "tag", "tags": ["artificial-intelligence"]}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/medium-articles-scraper") result = tool.invoke({"run_input": {"mode": "tag", "tags": ["artificial-intelligence"]}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Hear what people say about you](https://cliqtomedia.com/actors/use-cases/social-listening/): Find what people say about your brand and your topic on Bluesky, Hacker News, YouTube and more. - [Find the right creators, fast](https://cliqtomedia.com/actors/use-cases/creator-outreach/): Find podcasts, YouTube channels and newsletters in your niche, with public contact details. ## Similar tools - [Substack Newsletter Scraper](https://cliqtomedia.com/actors/substack-newsletter-scraper/) - [Hacker News Stories & Comments Scraper](https://cliqtomedia.com/actors/hacker-news-stories-comments-scraper/) - [Bilibili Scraper: Videos, Comments & Creators, No Login](https://cliqtomedia.com/actors/bilibili-scraper/) - [Bluesky Scraper — Posts, Profiles, Feeds & Threads, No Login](https://cliqtomedia.com/actors/bluesky-scraper/) - [Pinterest Search Scraper: Pins & Boards, No Login](https://cliqtomedia.com/actors/pinterest-search-scraper/) - [Product Hunt Launches Scraper – Daily Top, No Login](https://cliqtomedia.com/actors/product-hunt-launches/) --- # mobile.de Scraper for German Car Listings > mobile.de scraper for German car listings. Get price, mileage, year, fuel and photos in a table. No login. Track new cars on a schedule. URL: https://cliqtomedia.com/actors/mobile-de-scraper/ Category: Classifieds & second-hand · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Turn a mobile.de car search into a clean table. Use simple filters or paste a search link from your browser. Run it again later to see only new cars. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `BMW` in Make. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Scrape car listings from mobile.de, Germany's biggest car market. Search by make, model, price, first registration year and mileage, or paste mobile.de search links. Each car becomes one row with price, mileage, fuel, gearbox, power, location, dealer and photos. ### Good for - Track prices of one model, for example all BMW 3 Series cars under €30,000. - Collect dealer stock with mileage, power and photos for a price study. - Get new listings for a search every hour or every day. ### Not a good fit - Cars only. Motorbikes, vans and trucks are not supported. - No seller phone numbers or emails. Private sellers' names are never collected. Phone numbers and emails typed into descriptions and titles are removed (common German and international formats). - At most 10,000 listings per run. Listings without a price are skipped when a big search is split into price ranges. - Data is what mobile.de shows at the time of the run. Prices and stock change often. ## Price Prices will be shown after release. ## Questions ### Can I scrape mobile.de without an account? Yes. The tool reads public search results. You do not need a login, cookies or an API key. ### Does it work for motorbikes or vans? No. It works for cars only. Motorbikes, vans and trucks are not supported. ### Will I get the seller's phone number? No. Phone numbers and emails are not collected. For private sellers you get only the city and zip code. ### Why did my run return 0 cars? mobile.de had no cars for your filters, or nothing new appeared. The run summary tells you which. ### Why do I get 0 rows? mobile.de has no cars for your filters, or, with `onlyNew`, nothing new appeared. The summary says which. The run still succeeds. A source error is never shown as 0 rows; it fails the run. ### How fresh is the data? Each row is read live at the time shown in `fetchedAt`. ## Data fields - `listingId` (string): mobile.de listing id (number in the listing link). - `url` (string): Public listing page on suchen.mobile.de. - `title` (string): Listing title as shown on mobile.de, e.g. "BMW 320d Touring M Sport". - `make` (string): Make, e.g. "BMW". - `model` (string): Model, e.g. "320". - `subTitle` (string): Short extra text written by the seller (equipment highlights); contacts removed. - `category` (string): Body type, e.g. "Estate Car", "Saloon", "SUV / Off-road Vehicle / Pickup Truck". - `price` (number): Asking price (gross, EUR cents kept when the dealer shows them); null when the listing shows no price (never 0 for a missing price). - `currency` (string): Price currency, usually EUR; null without a price. - `priceNet` (number): Net price without VAT when a dealer shows it. - `priceNegotiable` (boolean): true when the seller marked the price as negotiable; null when mobile.de does not say. - `priceRating` (string): mobile.de price rating, e.g. "GOOD_PRICE", "REASONABLE_PRICE", "HIGH_PRICE"; null without a rating. - `firstRegistration` (string): First registration as YYYY-MM (or YYYY); null for new cars without registration. - `year` (integer): Year of first registration. - `mileageKm` (integer): Mileage in km. - `fuel` (string): Fuel type, e.g. "Diesel", "Petrol", "Electric", "Hybrid (petrol/electric)". - `gearbox` (string): Transmission, e.g. "Automatic", "Manual gearbox". - `powerKw` (integer): Engine power in kW. - `powerHp` (integer): Engine power in hp (PS). - `engineCc` (integer): Engine displacement in ccm. - `color` (string): Exterior colour. - `doors` (string): Number of doors as mobile.de shows it, e.g. "4/5". - `seats` (integer): Number of seats. - `sellerType` (string): "dealer" or "private" seller. - `sellerId` (string): mobile.de dealer id (dealers only). - `dealerName` (string): Dealer company name; always null for private sellers. - `dealerRating` (number): Dealer average rating (1-5) on mobile.de; dealers only. - `dealerReviewCount` (integer): Number of dealer reviews on mobile.de; dealers only. - `location` (object): Where the car is offered. - `kbaHsn` (string): German KBA manufacturer code (HSN) when listed. - `kbaTsn` (string): German KBA type code (TSN) when listed. - `onlineSince` (string): When the listing went online, local German time, YYYY-MM-DDTHH:MM. - `images` (array): Photo links at 1024 px. Search pages give the main photo; includeDetails gives all photos. - `imageCount` (integer): Number of photos in the listing. - `vehicleCondition` (string): "used" or "new" (only with includeDetails). - `description` (string): Seller description as plain text, phone numbers and emails removed (only with includeDetails). - `features` (array): Equipment list, e.g. "Navigation system", "Parking sensors" (only with includeDetails). - `attributes` (object): All technical data from the listing page as label -> value, e.g. "Emission class", "Number of previous owners", "HU" (only with includeDetails). - `searchUrl` (string): Search this listing was found by. - `source` (string): Always "mobile.de". ## Input settings - `make` (string): Car brand as on mobile.de, e.g. "BMW", "Volkswagen" (or "VW"), "Mercedes-Benz", "Audi". Leave empty to search all makes. Ignored when Search links are given. - `model` (string): Model or series, e.g. "3er" or "3 Series" (covers 316, 318, 320 ...), "C-Klasse", "320", "Golf", "X5". Needs a make. An unknown name fails with suggestions instead of returning an empty list. - `priceMin` (integer): Minimum asking price in euros. - `priceMax` (integer): Maximum asking price in euros (inclusive). - `yearFrom` (integer): Earliest year of first registration, e.g. 2019. - `yearTo` (integer): Latest year of first registration. - `mileageMax` (integer): Only cars with at most this many kilometres. - `condition` (string): New, used, or both. - `sellerType` (string): Dealers, private sellers, or both. Private sellers' names and phone numbers are never collected. - `searchUrls` (array): Instead of the filters above: links of mobile.de search result pages, copied from the browser after setting any filters on suchen.mobile.de (e.g. https://suchen.mobile.de/fahrzeuge/search.html?... or https://suchen.mobile.de/auto/bmw-320.html). Up to 20 links; each keeps its own sort unless Sort order is set. - `sort` (string): Order of results. The default sorts filter searches newest first and keeps the order of each search link. "Newest listings first" is best for monitoring with Only new listings. - `maxItems` (integer): Stop after this many listings in total. Several search links share it evenly (what a small search leaves goes to the next). mobile.de shows at most 2,000 results per search; bigger searches are split into price ranges automatically. - `includeDetails` (boolean): Also open each listing page for all photos, the seller description (phone numbers and emails removed), the equipment list and all technical data. Slower: one extra request per listing. - `onlyNew` (boolean): Return only listings that appeared since the previous run of the same search (with "Newest listings first", reading stops at the first page with no new listings; other orders stop after 5 such pages in a row). Use with a schedule to monitor new cars. The first run returns the newest listings up to Maximum listings and remembers them. - `stateKey` (string): Name for the Only new listings history (letters, digits, - and _). Leave empty to use one history per search; set it to keep history when you tweak filters. ## Step by step on Apify 1. Open the Input tab. 2. Keep the prefill: Make `BMW`, Model `3er`, Maximum listings `10`. 3. Click Start. 4. Open the Output tab and look at the Car listings table. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Price study for a model | `make`, `model`, `yearFrom`, `mileageMax` | car listing | `price`, `year`, `mileageKm`, `powerKw` | export CSV / Excel | | Watch new cars for a search | `searchUrls` or filters + `onlyNew`, schedule | new car listing | `listingId`, `url`, `price`, `onlineSince` | webhook, Make, Zapier | | Dealer stock list | `sellerType` `dealer`, `make` | car listing | `dealerName`, `sellerId`, `location`, `images` | Google Sheets, API | | Full car details | any search + `includeDetails` | car listing with details | `description`, `features`, `attributes`, `images` | database, AI agent | ## Tips - Set your filters on mobile.de first, then paste the search link. You keep every filter. - A run stops at 10,000 cars. Split very big searches by model or price. - Use only-new mode with a daily schedule to get fresh cars only. ## Limits - Cars only. Motorbikes, vans and trucks are not supported. - Up to 10,000 listings and 20 search links per run. - A run reads at most 40 result pages that save nothing (plus one more page for every two saved listings), or 10 after a switch to the backup connection. This keeps monitoring runs with no news short. - 10,000 listings took 176 seconds in our test. The default 300-second timeout is enough for most runs. With `includeDetails`, raise the timeout for big runs. - mobile.de shows at most 2,000 results per search. Bigger searches are split into price ranges; listings without a price are skipped then. - If you set a maximum cost per run, the run stops before it, keeps the saved rows and ends with `PARTIAL` / `CHARGE_LIMIT`. - If the run reaches its timeout, saved rows stay and the summary says `PARTIAL` / `TIME_LIMIT`. - If mobile.de fails after some rows, the rows stay, the summary says `PARTIAL` and the run is marked failed, so you can see it. ## Sample result ```json { "listingId": "452795179", "url": "https://suchen.mobile.de/auto-inserat/bmw-320d-limousine-m-sport-head-up-ahk-navi-kamera-forchheim/452795179.html", "title": "BMW 320d Limousine M Sport Head-Up+AHK+Navi+Kamera", "make": "BMW", "model": "320", "category": "Saloon", "price": 38474, "currency": "EUR", "priceNet": 32331.09, "priceRating": "GOOD_PRICE", "firstRegistration": "2025-06", "year": 2025, "mileageKm": 10635, "fuel": "Diesel", "gearbox": "Automatic", "powerKw": 140, "powerHp": 190, "sellerType": "dealer", "dealerName": "Autohaus Wormser GmbH Forchheim", "location": { "countryCode": "DE", "zip": "91301", "city": "Forchheim", "street": null }, "onlineSince": "2026-04-11T06:04", "images": ["https://img.classistatic.de/api/v1/mo-prod/images/73/7354600d-5620-4994-93b6-84d54d6c2608?rule=mo-1024"], "imageCount": 34, "description": null, "source": "mobile.de", "fetchedAt": "2026-10-15T10:26:57.791Z" } ``` ## Similar tools - [AutoScout24 Scraper - EU Car Listings & Prices, No login](https://cliqtomedia.com/actors/car-listings-scraper/) - [Depop Scraper - Listings, Prices, Brands & Shops](https://cliqtomedia.com/actors/depop-scraper/) - [Kleinanzeigen Scraper: Listings, Prices & Photos (No Login)](https://cliqtomedia.com/actors/kleinanzeigen-scraper/) - [OLX Listings Scraper: Poland, Ukraine, Romania & More](https://cliqtomedia.com/actors/olx-listings-scraper/) - [Subito.it Scraper - Italy Classifieds & Prices, No Login](https://cliqtomedia.com/actors/subito-listings-scraper/) - [Craigslist Scraper - Listings, Prices & Photos, No Login](https://cliqtomedia.com/actors/craigslist-scraper/) --- # The Met and Art Institute of Chicago Artwork Search > Find public domain art images from The Met and the Art Institute of Chicago. Filter by artist, department and date. Get credit lines and links. URL: https://cliqtomedia.com/actors/museum-open-access-search/ Category: Science & research data · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Search two big museum collections with one input. Keep only public-domain works, or see other artwork data too. Each row has the artist, date and rights flag. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `met` in Museums. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Search The Met and Art Institute of Chicago for artwork metadata and public-domain image links. This Actor brings artist names, creation dates, credit lines and rights flags into one dataset. No museum API key is needed. ## Price Prices will be shown after release. ## Questions ### Are the images free to reuse? Image links come only for confirmed public-domain records. Still check the museum page. ### Do I need a museum API key? No. The museum sources are public. ### Does an empty search cost money? Yes, only the small start fee. ### Can I export the full collection? No. One run gives up to 200 works. ### Can I get more than 200 works? A single run supports at most 200 rows. Split your searches by subject, museum or years. The Actor does not promise a complete collection export or provide a pagination cursor. ### Is this a drop-in replacement for other museum Actors? The inputs and field names are specific to this Actor. Use the tables above to map them into your workflow. ## Data fields - `museum` (string): Museum code: met or aic. Use with objectId as a unique key. - `provider` (string): Full name of the museum that supplied this record. - `objectId` (integer): Positive integer artwork ID from the museum. IDs can overlap between museums. - `title` (string): Artwork title from the museum; null when missing. - `artist` (string): Artist display text from the museum; may include nationality and dates. Null when missing. - `date` (string): Original creation date label, such as c. 1950. Null when missing. - `dateStart` (integer): Start of creation period in integer years; negative means BCE. Null when absent. - `dateEnd` (integer): End of creation period in integer years; null when absent. - `medium` (string): Original material or technique text; null when missing. - `dimensions` (string): Original dimensions text, including source units; null when missing. - `department` (string): Museum department name; null when missing. - `publicDomain` (boolean): Museum public-domain flag. Null means the source did not supply a boolean. - `licence` (string): Image reuse classification: CC0, restricted_or_other, or unknown. - `metadataLicence` (string): Licence for returned metadata: CC0. Chicago description text is excluded. - `primaryImageUrl` (string): HTTPS open-image link only when publicDomain is true and an image exists; otherwise null. - `iiifUrl` (string): Chicago IIIF presentation manifest URL for confirmed open images; null for Met or restricted/missing images. - `creditLine` (string): Museum credit text to keep with the artwork; null when absent. - `objectUrl` (string): HTTPS museum page for this artwork. - `sourceUrl` (string): HTTPS first-party API record for this artwork. - `fetchedAt` (string): ISO timestamp when this Actor read the record. - `sourceUpdatedAt` (string): Record update time in the museum source system (Met metadataDate, Chicago source_updated_at); null when missing. ## Input settings - `query` (string, required): Met searches object metadata. Chicago requires all words in at least one title, artist or medium field. Use plain words; no shared advanced query syntax. - `museums` (array): Choose met and/or aic. The result limit is shared. Duplicate choices are removed. - `publicDomainOnly` (boolean): Keep only objects whose museum marks them as public domain. When off, restricted metadata may appear, but restricted image and IIIF links stay empty. - `department` (string): Optional case-insensitive part of the museum department name, such as European Paintings or Prints and Drawings. Checked after search; department IDs are not accepted. - `artist` (string): Optional case-insensitive part of the artist display name, such as van Gogh or Lemmen. Checked after search. - `dateFrom` (integer): Optional lower creation year. Keeps works whose creation period overlaps the year range. Negative years mean BCE. Missing date ends are excluded. - `dateTo` (integer): Optional upper creation year. May be used without dateFrom. Must be at least dateFrom when both are set. Missing date starts are excluded. - `maxResults` (integer): Total rows across selected museums, from 1 to 200. The search checks a bounded number of candidates; selective filters may return fewer rows. ## Step by step on Apify 1. Open Input. The form shows `sunflowers`, both museums, public domain only and 20 rows. 2. Keep these values and click Start. 3. Open the Artworks output view for titles, artists and image links. 4. Open Rights for licences and credit lines. 5. Check Run summary for per-museum counts and limits, then export the Dataset. ## Use cases | Task | Input | Key fields | |---|---|---| | Find open images for a lesson | Subject query, public domain only | `title`, `primaryImageUrl`, `creditLine` | | Build a design research shortlist | Query plus artist or years | `artist`, `dateStart`, `dateEnd`, `medium` | | Check reuse rights before selecting art | One or both museums | `publicDomain`, `licence`, `objectUrl` | ## Tips - One run gives up to 200 works. Split by museum, subject or years. - Always check the museum page for third-party rights. - Use the credit line when you show an image. ## Limits A forced platform kill can stop the process before the final summary is written. Dataset storage and event charging are separate operations; a lost storage response can need manual reconciliation. - At most 200 saved rows per run, 180 Met candidates and 400 Chicago candidates, with a shared budget of 240 source requests and 2 MB of response data. A Met-only search therefore returns at most 180 rows. - Requests are sequential for each museum, about one per second. Selective filters can use the whole candidate budget and still find no eligible works. - Use 256 MB memory. Other memory settings are rejected before museum requests. - Internal source work is bounded to 245 seconds or an earlier platform deadline. Raising the platform timeout does not expand the search. - `complete` means this query was exhausted within the bounds. `not_found` means it was exhausted with no eligible records. - `partial` with `MAX_RESULTS`, `SCAN_LIMIT` or `TIME_LIMIT` means more matching candidates may remain. These bounded runs succeed. - `partial` with `CHARGE_LIMIT` means the buyer budget stopped delivery; the run succeeds. - Source errors, a deadline hit while retrying a failing source, invalid input or cancellation make the run fail. Any rows saved before the stop remain available; the summary is `partial` if there are rows, otherwise `error`. ## Sample result ```json { "museum": "met", "provider": "The Metropolitan Museum of Art", "objectId": 436524, "title": "Sunflowers", "artist": "Vincent van Gogh", "date": "1887", "dateStart": 1887, "dateEnd": 1887, "medium": "Oil on canvas", "dimensions": "17 x 24 in. (43.2 x 61 cm)", "department": "European Paintings", "publicDomain": true, "licence": "CC0", "metadataLicence": "CC0", "primaryImageUrl": "https://images.metmuseum.org/CRDImages/ep/original/DP-41223-001.jpg", "iiifUrl": null, "creditLine": "Rogers Fund, 1949", "objectUrl": "https://www.metmuseum.org/art/collection/search/436524", "sourceUrl": "https://collectionapi.metmuseum.org/public/collection/v1/objects/436524", "fetchedAt": "2026-10-14T00:47:17.631Z", "sourceUpdatedAt": "2026-02-04T04:58:06.107Z" } ``` ## Similar tools - [Google Patent Details Scraper](https://cliqtomedia.com/actors/google-patents-scraper/) - [DOI Metadata & Bibliography Enrichment](https://cliqtomedia.com/actors/doi-bibliography-enrichment/) - [ClinicalTrials.gov Studies Search & Monitor](https://cliqtomedia.com/actors/clinicaltrials-gov-studies-monitor/) - [DataCite Research Dataset Search](https://cliqtomedia.com/actors/datacite-dataset-search/) - [Europe PMC Literature Search & Monitor](https://cliqtomedia.com/actors/europe-pmc-literature-search/) - [GBIF Biodiversity Occurrence Search](https://cliqtomedia.com/actors/gbif-occurrence-search/) --- # NASA POWER Weather and Solar Data Export > NASA POWER data download for up to 10 points. Daily or monthly temperature, rain, wind and solar irradiance since 1981, with units. No API key. URL: https://cliqtomedia.com/actors/nasa-power-climate-data/ Category: Government & open data · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto Get past weather and solar data for any latitude and longitude. The data comes from NASA POWER, built from satellites and models. You get one simple long table with units. ## How to use it: 3 steps 1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `42.0308, -93.6319, Ames IA` in Locations (latitude, longitude[, label]). Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Get historical daily or monthly weather and solar data for any latitude and longitude from [NASA POWER](https://power.larc.nasa.gov/): air temperature, precipitation, wind, humidity, solar irradiance and other parameters since 1981. You get one clean row per location, period and parameter, with units, and missing values as `null`. - Takes up to 10 points as `latitude, longitude`. - Calls the official NASA POWER API once per point (up to 20 parameters per call). - Turns the answer into long rows: location × period × parameter → value + units. - Marks NASA's fill value `-999` as `status: "missing"` and `value: null`. Missing rows are free. - Saves a run summary with counts, units and the NASA attribution text. ### Good for - Daily weather history for fields, farms or sites (temperature, rain, wind, humidity). - Solar irradiance history for solar site checks, in MJ/m²/day, kWh/m²/day or W/m². - Monthly and annual values since 1981 for long-term comparisons and model features. - One table you can load into Excel, pandas, BigQuery or an AI agent without parsing NASA's JSON. ### Not a good fit - No forecasts. NASA POWER is history plus near-real-time. A future end date is moved back to today. - No hourly data, climatology or regional grids in this version. Only daily and monthly point data. - Not station data. Values are grid-cell averages; points close together can return the same cell. - The newest 2–5 days are usually not published yet. They come back as `missing`. ## Price Prices will be shown after release. ## Questions ### Can I get a weather forecast? No. NASA POWER has history only. A future end date moves back to today. ### Is this local weather station data? No. It comes from satellite data and climate models on a grid. ### How far back does the data go? Daily and monthly values start in 1981. ### Is there hourly data? No. This tool gives daily or monthly values only. ## Data fields - `status` (string): Row result: complete (value present), missing (NASA POWER fill value -999 or no value yet; value null, not charged) or error (location failed; see statusReason). - `statusReason` (string): Why the row is missing or failed; null for complete rows. - `locationIndex` (integer): 1-based position of the location in the input list. - `locationLabel` (string): Label from the input (third part of "lat, lon, label"), or null. - `latitude` (number): Latitude as requested, decimal degrees. - `longitude` (number): Longitude as requested, decimal degrees. - `elevationM` (number): Grid-cell elevation in metres reported by NASA POWER. - `temporal` (string): Resolution: daily or monthly. - `period` (string): Period: 2026-10-04 (daily), 2025-03 (monthly) or 2025 (annual value of a monthly run). - `date` (string): ISO date of the day, or the first day of the month; null for annual values. - `year` (integer): Year of the period. - `month` (integer): Month 1-12; null for annual values. - `day` (integer): Day of month for daily rows; null otherwise. - `isAnnual` (boolean): True for the annual value of a monthly run. - `parameter` (string): NASA POWER parameter code, e.g. T2M. - `parameterName` (string): Parameter long name from NASA POWER. - `value` (number): Value in the units column; null when missing. - `units` (string): Units as reported by NASA POWER for this community, e.g. C, mm/day, m/s, MJ/m^2/day. - `community` (string): NASA POWER community that set the units: AG, RE or SB. - `timeStandard` (string): Day boundary: LST (local solar time) or UTC. - `provider` (string): Always NASA POWER. - `apiVersion` (string): NASA POWER API version that served the data, e.g. v2.10.0. - `dataSources` (array): Upstream data sources listed by NASA POWER (e.g. FLASHFLUX, GEOSIT, POWER for daily data). - `sourceUrl` (string): NASA POWER API request URL for this location (no key needed). - `fetchedAt` (string): UTC timestamp when the Actor fetched the data. ## Input settings - `locations` (array, required): Up to 10 points, one per line, as decimal degrees: "42.03, -93.62" or "48.8566, 2.3522, Paris". Latitude −90..90, longitude −180..180. NASA POWER is a ~0.5° global grid, so nearby points return the same cell. Invalid lines become error rows; duplicates are skipped. - `parameters` (array): NASA POWER parameter codes, up to 20, e.g. T2M (air temperature at 2 m), PRECTOTCORR (precipitation), WS2M (wind speed at 2 m), ALLSKY_SFC_SW_DWN (solar irradiance), RH2M, T2M_MAX, T2M_MIN. Full list: https://power.larc.nasa.gov/parameters/. Unknown codes are dropped with a warning. Default: T2M, PRECTOTCORR, WS2M, ALLSKY_SFC_SW_DWN. - `temporal` (string): daily: one value per day, up to 366 days per run. monthly: one value per month for whole calendar years from 1981, plus the annual value. - `community` (string): NASA POWER user community; it sets the units. AG (agroclimatology): solar in MJ/m^2/day. RE (renewable energy): solar in kW-hr/m^2/day. SB (sustainable buildings): solar in W/m^2. Temperature, rain and wind are the same in all three. - `lastDays` (integer): Used when Start date is empty: the range ends on End date (or today) and covers this many days. NASA POWER usually lags 2–5 days, so the newest days come back as missing (value null, not charged). - `startDate` (string): First day, e.g. 2025-01-01. Data start on 1981-01-01. Daily runs cover at most 366 days; monthly runs use the whole year of this date. Leave empty to use Last N days (daily) or last year + this year (monthly). - `endDate` (string): Last day, inclusive. Empty means today. A future date is moved back to today (NASA POWER has no forecasts). - `timeStandard` (string): LST: days in local solar time (NASA POWER default). UTC: days in UTC. Monthly data are always LST. - `includeMissingValues` (boolean): Keep rows where NASA POWER has no value yet (fill value −999) as status "missing" with value null. They are never charged. Turn off to get only real values. - `includeAnnual` (boolean): Monthly runs also return NASA POWER's annual value per year (period "2025", isAnnual true). ## Step by step on Apify 1. Open the Input tab. Two points (Ames, Iowa and Paris) and four parameters are already filled in. 2. Keep Resolution = `Daily` and Last N days = `30`, or change them. 3. Click Start. 4. Open the Output tab and look at the Values view. ## Use cases - Agriculture: daily temperature, rain and solar radiation for crop models, growing degree days and irrigation checks. - Solar energy: monthly irradiance history (kWh/m²/day) to compare sites before a project. - Buildings and energy audits: monthly temperature and irradiance (W/m²) for a building location. - Insurance and risk: check what the weather was at a place on a given date range. - Data science and AI: weather features in one long table, with units in every row. ## Tips - Pick the community to set solar units: AG, RE or SB. - The grid is about 50 km. Use it for areas, not one exact street. - Missing values are null and free, so check the status column. ## Limits - Up to 10 locations and 20 parameters per run. - Daily: up to 366 days per run. Monthly: whole calendar years from 1981; the current year has only the months NASA POWER has already published. - Some solar parameters start in 1984, so older months come back as `missing`. - The Actor sends at most 3 requests at a time to NASA POWER and retries short errors (HTTP 429 and 5xx). - If some points fail and others work, the run status is `PARTIAL`: good rows are kept, failed points get one `error` row each. - Run statuses in `RUN_SUMMARY.status`: `COMPLETE`, `PARTIAL`, `NO_DATA`, `CAPPED`, `ERROR`, `INVALID_INPUT`, `CANCELLED`. ## Sample result ```json { "status": "complete", "statusReason": null, "locationIndex": 1, "locationLabel": "Ames IA", "latitude": 42.0308, "longitude": -93.6319, "elevationM": 310.22, "temporal": "daily", "period": "2026-09-13", "date": "2026-09-13", "year": 2026, "month": 9, "day": 13, "isAnnual": false, "parameter": "T2M", "parameterName": "Temperature at 2 Meters", "value": 16.54, "units": "C", "community": "AG", "timeStandard": "LST", "provider": "NASA POWER", "apiVersion": "v2.10.0", "dataSources": ["FLASHFLUX", "GEOSIT", "POWER"], "sourceUrl": "https://power.larc.nasa.gov/api/temporal/daily/point?parameters=T2M%2CPRECTOTCORR%2CWS2M%2CALLSKY_SFC_SW_DWN&community=AG&longitude=-93.6319&latitude=42.0308&start=20260913&end=20261012&format=JSON&time-standard=LST", "fetchedAt": "2026-10-12T13:15:29.789Z" } ``` ## Similar tools - [EU TED Tenders Scraper & Monitor](https://cliqtomedia.com/actors/eu-ted-tenders-scraper/) - [UK Bank Holidays & Business Day Calculator](https://cliqtomedia.com/actors/uk-bank-holidays-business-days/) - [UK Postcode Lookup](https://cliqtomedia.com/actors/gb-postcode-lookup/) - [USAspending Federal Awards & Recipient Monitor](https://cliqtomedia.com/actors/usaspending-federal-awards-monitor/) - [VIN Decoder & Vehicle Recalls](https://cliqtomedia.com/actors/vin-decoder-vehicle-recalls/) - [FDA Recalls & Enforcement Monitor](https://cliqtomedia.com/actors/fda-recalls-enforcement-monitor/) --- # Naver Shopping Scraper: Korean Products and Prices > Naver Shopping scraper for Korea: price, lowest price, seller count, mall, brand, reviews and rating by keyword. Up to 1,000 products per keyword. URL: https://cliqtomedia.com/actors/naver-shopping-scraper/ Category: E-commerce & prices · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/naver-shopping-scraper?fpr=cliqto Search Naver Shopping, Korea's largest shopping search, by keyword. Each product is one row with price, lowest price, mall and reviews. No Naver account needed. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `무선 이어폰` in Search keywords. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does Search Naver Shopping (네이버 쇼핑), Korea's largest shopping search, by keyword and get one row per product with price, lowest price, seller count, mall, brand, reviews, rating, ad flag and links. - Catalog cards (price comparison pages) give the shown price, the lowest price and the number of sellers. - Single-seller cards give the price, the list price before discount, the discount, the mall name and the purchase count. - Sponsored listings are kept and marked with `isAd: true`. You can turn them off. - Each row has the keyword, its position, the source and the time we read it. ### Good for - Check the market price of a product in Korea, with the lowest price across sellers. - Watch which brands, malls and ads show up for your keywords. - Build a product list for a category keyword with reviews and ratings. ### Not a good fit - Search results only. Product detail pages (options, stock, full review text, seller lists) are not included. - Naver's ranking is personal and changes during the day. Two runs can show a different order. - This is not a drop-in replacement for scrapers that expand each catalog into all its sellers. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Product | $0.0015 (from $0.0013 on paid Apify plans) | One Naver Shopping product row saved to the dataset. not_found and error rows are free. | | Start fee | $0.004 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | - One product: about $0.0055. - 1,000 products: about $1.50. - Every day 100 products, for 30 days: about $4.62 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/naver-shopping-scraper?fpr=cliqto ## Questions ### Do I need a Naver API key? No. No account or key is needed. ### Why is the order different each run? Naver ranking is personal and changes during the day. ### Do I get product detail pages? No. Only search results. Options, stock and full reviews are not included. ### How many products can I get? Up to 1,000 per keyword and 20 keywords per run. ### Why is a catalog price sometimes very low? For catalog cards, Naver shows the lowest offer across all sellers. Sometimes that offer is a rental, a used item or an accessory (we saw rentals at ₩1). The Actor keeps Naver's number as shown; check `sellerCount` and `listingType`, or set `minPrice`. ### Is the data the same as on Naver? Yes, it is the order and prices that Naver's mobile search shows at `fetchedAt`. Naver personalises ranking and updates prices all the time, so runs at different times can differ. Reviews on catalog cards are Naver's total across sellers. ### Can I use the data? The Actor reads public pages. Naver's terms and robots.txt limit automated access, and you are responsible for how you use the data. If you need an official channel, Naver offers a Shopping Search API with your own developer key and a daily quota. This Actor is independent and not affiliated with Naver. ## Data fields - `recordType` (string): Row type: product, or query for a keyword that returned no products (not_found) or failed (error). - `status` (string): complete, partial (a key field such as price or image is missing; see missingFields), not_found or error. - `query` (string): The search keyword this row belongs to. - `position` (integer): 1-based position within the keyword: Naver order, or your chosen sort. - `productId` (string): Naver product ID (nvMid). Catalog IDs open at search.shopping.naver.com/catalog/. - `title` (string): Product name without highlight tags. - `price` (integer): Price shown on the listing in won, discount applied; for a catalog product, the headline price Naver shows (usually the lowest offer — see lowPrice). null if Naver shows none. - `originalPrice` (integer): List price before discount; null when there is no discount information. - `discountRate` (number): Discount percent shown by Naver; 0 when no discount; null when unknown. - `lowPrice` (integer): Lowest price across offers (catalog products compare several sellers); equals price for single-seller listings. - `currency` (string): Always KRW. - `listingType` (string): catalog (Naver price-comparison product with several sellers) or single_seller. - `sellerCount` (integer): Number of sellers for a catalog product; 1 for single-seller listings. - `mall` (string): Store name for single-seller listings; null for catalog products (several sellers). - `brand` (string): Brand when the product appears under one of Naver's brand filters for this keyword; null otherwise (not guessed). - `maker` (string): Manufacturer when the product appears under one of Naver's manufacturer (제조사) filters for this keyword; null otherwise (not guessed). - `categoryId` (string): Naver leaf category ID. - `categoryIds` (array): Naver category path IDs, from top level to the most specific. - `reviewCount` (integer): Number of reviews Naver shows on the search card (for catalog products: across sellers). - `rating` (number): Average review score 0–5; null when there are no reviews or Naver shows no score for the listing (e.g. some Coupang listings). - `purchaseCount` (integer): Recent purchases shown by Naver for single-seller listings; null for catalog products. - `wishlistCount` (integer): Number of shoppers who saved the product (찜). - `deliveryFee` (integer): Delivery fee in won; 0 = free; null when not shown. - `isAd` (boolean): true for sponsored (paid) listings. - `isSmartStore` (boolean): true when sold in a Naver Smart Store. - `isBrandStore` (boolean): true when sold in an official Naver Brand Store. - `isOverseas` (boolean): true for overseas (cross-border) listings. - `smartStoreProductId` (string): Smart Store product number, when applicable. - `url` (string): Product page URL (store page, or Naver catalog page for catalog products). - `mobileUrl` (string): Mobile product page URL. - `image` (string): Main product image URL. - `missingFields` (array): Key fields that are empty on this partial row. - `message` (string): query rows only: why the keyword has no products or failed. - `errorCode` (string): query rows only: machine code such as BLOCKED, RATE_LIMITED, SOURCE_UNAVAILABLE; null for not_found. - `source` (string): Data source: naver_shopping_mobile_search. - `sourceUrl` (string): Naver search page for the keyword. - `fetchedAt` (string): When the data was read (ISO 8601, UTC). ## Input settings - `queries` (array, required): Keywords exactly as you would type them on Naver Shopping, in Korean or English, e.g. 무선 이어폰 or 아이패드. Up to 20 keywords per run; duplicates are searched once. - `maxItems` (integer): How many products to return for each keyword (1–1,000). Naver lists ~90 products per filter; beyond that the Actor narrows by brand and price range to reach more. You pay per product returned. - `minPrice` (integer): Only products priced at or above this many won. Applied by Naver. Leave empty for no lower limit. - `maxPrice` (integer): Only products priced at or below this many won. Applied by Naver. Leave empty for no upper limit. - `sort` (string): Order of the returned products. relevance keeps Naver's order; the other options sort the collected products by price, review count or rating. - `includeAds` (boolean): Keep paid (ad) listings in the results; each row has isAd so you can filter later. Turn off for organic results only. - `addBrandNames` (boolean): Fill brand and maker using Naver's brand and manufacturer filters (up to 16 extra requests per keyword, no extra charge). Products outside the top brands keep null. ## Step by step on Apify 1. Open the Input tab. 2. Add one keyword to Search keywords (`queries`), for example `무선 이어폰`. Korean keywords give the best results. 3. Keep Products per keyword (`maxItems`) at 20 for a first test. 4. Click Start. 5. Open the Products view in the Output tab. ## Use cases | Task | Input | You get | Key fields | Next step | |---|---|---|---|---| | Price check for a product | `queries` + `minPrice`/`maxPrice` | product | `price`, `lowPrice`, `sellerCount`, `mall` | Export to a sheet, convert KRW | | Brand and ad watch | `queries`, `includeAds: true` | product | `brand`, `maker`, `isAd`, `position` | Schedule a daily run | | Category product list | `queries`, `maxItems: 1000` | product | `title`, `reviewCount`, `rating`, `categoryId` | Load the dataset by API | ## Tips - Turn off brand names for small, fast runs. They need extra requests. - Use the price range filter to remove very cheap parts and accessories. - Turn off ads if you want only normal listings. ## Limits - Up to 20 keywords and 1,000 products per keyword per run. - Speed: about 1,000 products in 20 seconds. Each keyword takes at least 3–15 seconds, even for a few products, because brand names need extra requests (20 keywords × 1 product took about 3 minutes). Set `addBrandNames` to `false` for faster small runs. 20 keywords × 1,000 products took 350 seconds. The default timeout is 300 seconds, so for more than about 15,000 products set a longer timeout (for example 600 seconds) in the run options. If time runs out, the run keeps what it saved, ends as `PARTIAL` and lists the keywords it did not start. - A few keywords show a short list on Naver (for example hotel or travel words). Then you may get fewer products than `maxItems`. ## Sample result ```json { "recordType": "product", "status": "complete", "query": "무선 이어폰", "position": 8, "productId": "56796984706", "title": "삼성전자 갤럭시 무선이어폰 버즈3 FE SM-R420N 노이즈 캔슬링 그레이", "price": 143000, "originalPrice": null, "discountRate": null, "lowPrice": 132990, "currency": "KRW", "listingType": "catalog", "sellerCount": 71, "mall": null, "brand": "갤럭시", "reviewCount": 8467, "rating": 4.9, "purchaseCount": null, "isAd": false, "url": "https://search.shopping.naver.com/catalog/56796984706", "source": "naver_shopping_mobile_search", "sourceUrl": "https://m.search.naver.com/search.naver?where=m_shop&query=%EB%AC%B4%EC%84%A0+%EC%9D%B4%EC%96%B4%ED%8F%B0", "fetchedAt": "2026-10-14T12:35:23.121Z" } ``` ## Use it from code Actor ID: `cliqtomedia/naver-shopping-scraper` ```python from apify_client import ApifyClient client = ApifyClient("YOUR_APIFY_TOKEN") run = client.actor("cliqtomedia/naver-shopping-scraper").call(run_input={ "queries": [ "무선 이어폰" ], "maxItems": 20 }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ``` ```bash curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~naver-shopping-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"queries": ["무선 이어폰"], "maxItems": 20}' ``` ```python # pip install langchain-apify # set APIFY_TOKEN in your environment from langchain_apify import ApifyActorsTool tool = ApifyActorsTool("cliqtomedia/naver-shopping-scraper") result = tool.invoke({"run_input": {"queries": ["무선 이어폰"], "maxItems": 20}}) print(result) ``` run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/ ## Use cases with this tool - [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/): Track prices and offers in shops and marketplaces. See changes before your customers do. ## Similar tools - [Historical Exchange Rates & Currency Converter](https://cliqtomedia.com/actors/historical-fx-rates-converter/) - [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/) - [AliExpress Scraper: Products, Prices & Reviews, No Login](https://cliqtomedia.com/actors/aliexpress-scraper/) - [Coles, Woolworths & Aldi Price Scraper - No Login](https://cliqtomedia.com/actors/au-supermarket-prices/) - [Idealo Price Scraper: All Shop Offers, 6 Countries, No Login](https://cliqtomedia.com/actors/idealo-price-scraper/) - [Trendyol Scraper: Products, Prices & Reviews (No login)](https://cliqtomedia.com/actors/trendyol-scraper/) --- # News Article Extractor: Clean Text from News Links and Feeds > News article extractor for links, RSS feeds and news sitemaps. Get clean article text, title, author, date and tags as JSON or CSV. No login needed. URL: https://cliqtomedia.com/actors/news-article-extractor/ Category: AI-ready content & documents · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/news-article-extractor?fpr=cliqto Paste news links or a news site. You get the article text without menus and ads. Each article comes with its title, author, date and tags. ## How to use it: 3 steps 1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us. 2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `{"url": "https://www.bbc.co.uk/news/articles/cm2d6e62p49do"}` in Article URLs. Each start is one run. 3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too. ## What it does News Article Extractor turns news article links, news sites, RSS/Atom feeds and news sitemaps into clean article text with title, author, publish date, language, tags and main image. - Article links (`articleUrls`): it opens each link and returns the article body without menus, ads, bylines, photo captions and newsletter boxes. - News sites (`siteUrls`): give a homepage like `https://www.theverge.com`. The Actor finds the site's RSS/Atom feed or news sitemap, takes the newest articles and extracts each one. You can also give the feed or sitemap URL directly. ### Good for - Daily or hourly news monitoring: schedule the Actor with Only new articles and get only articles you have not received before. - Building a text dataset from a list of article links for analysis, summaries or RAG. - Getting publish dates, authors and tags for a list of article URLs. ### Not a good fit - Paywalls and logins are not bypassed. For subscriber-only pages you get only the public part (see `isAccessibleForFree`). - Sites that block automated requests (for example some large publishers with bot protection) return a `BLOCKED` error. The Actor does not use a browser or proxies. - Sites without an RSS/Atom feed or a sitemap cannot be used in `siteUrls`. Use their article links in `articleUrls` instead. - Comments, videos and image galleries are not extracted. ## Price Pay per event. Apify bills you, not us. | What you pay for | Price | When | |---|---|---| | Start fee | $0.003 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. | | Article extracted | $0.0021 (from $0.0018 on paid Apify plans) | One article delivered to the dataset with clean text and metadata. Duplicates, skipped pages (too short, older than dateFrom, not an article) and articles already returned with 'Only new' are free. | | Site scanned | $0.002 | One entry from 'News sites, RSS feeds or sitemaps' that the Actor searched for feeds and sitemaps, charged once per site per run whether or not new articles were found. | | Article URL failed | $0.0005 | One entry from 'Article URLs' that the site answered with an error (not found, blocked, timeout, HTTP error) or with a page that is not an article or is shorter than 'Minimum words'. Invalid, private and skipped URLs are free. | - One article: about $0.0051. - 1,000 articles: about $2.10. - Every day 100 articles, for 30 days: about $6.39 a month. Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/news-article-extractor?fpr=cliqto ## Questions ### Can I read paywalled news with it? No. It does not get past paywalls or logins. For subscriber pages you get only the free part. ### What if a site has no RSS feed? Then the site URL will not work. Paste the article links one by one instead. ### Why do some sites give an error? Some big publishers block automated visits. The tool does not use a browser or proxies, so these pages show BLOCKED. ### Does it save comments or videos? No. You get the article text and its details. Comments, videos and photo galleries are left out. ### Do I need an API key or login? No. The Actor reads public pages only. ### Does it bypass paywalls? No. For subscriber-only pages it returns the public part and `isAccessibleForFree: false`. ### How do I get only new articles every day? Set `onlyNew` to `true` and run the Actor on a schedule. Use a different `stateKey` for each schedule. You are charged only for articles you have not received yet. ### Why is publishedAt null? The page and the feed did not give a publish date. When `dateFrom` is set, such site articles are skipped. ## Data fields - `url` (string): Article URL after redirects. - `canonicalUrl` (string): Canonical URL declared by the page (link rel=canonical or og:url); falls back to url. Used to drop duplicates. - `title` (string): Headline (og:title, then JSON-LD headline, then page title). - `author` (string): Author name(s), comma-separated, from JSON-LD, meta tags or byline. Profile URLs are never returned as names. null when the page does not name an author. - `publishedAt` (string): Publish time, ISO 8601 UTC, from JSON-LD, meta tags,