# Keklik: everything in one file > Ready-made web scrapers for Google Maps, LinkedIn, Instagram, Zillow and Rightmove. They run on Apify: open one in your Apify account, enter what to search, and download the results as CSV, Excel, JSON or Google Sheets. You pay Apify per result, with Apify's platform costs included. There is no subscription with Keklik. To run a scraper for a user: read its .md page, build the input JSON from its Input section, tell the user what the run will cost, and run it with the Apify MCP server (https://mcp.apify.com) or the Apify API with the user's token once they confirm. # Scraper: Google Maps Reviews Scraper > Type in any Google Maps place and get all its reviews, with the stars, the text in your language, the date, likes and the owner's reply. Google Maps Reviews Scraper gets every review of the places you give it, not just the 5 that Google’s official API returns. Each review is one row with its stars, text (translated into your language if you want), date, likes, the reviewer and the owner’s reply. Filter by date, stars, text or photos, and the reviews you filter out are free. - Web page: https://keklik.io/scrapers/google-maps-reviews-scraper - Apify Actor: `keklik/google-maps-reviews-scraper` (https://apify.com/keklik/google-maps-reviews-scraper) - You enter: Google Maps place links or Place IDs - You get: Stars, review text, date, likes, reviewer, owner reply and the place’s details - Status: working, last tested 11 Nov 2026 - Needs: an Apify account (free is enough to try). No login to the site itself. ## Price per 1,000 reviews US dollars, on each Apify plan. Apify's platform costs are included. Add-ons are charged only when switched on in the input. | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Review: Each review the scraper saves. Reviews removed by filters are free. | $0.45 | $0.35 | $0.30 | $0.22 | | Original date of an edited review (add-on) | $0.40 | $0.35 | $0.30 | $0.25 | Apify's plans and a calculator: https://keklik.io/pricing.md ## Input The run input is a JSON object with these keys: - `urls` (array, required): Places. One per line: a place link from your browser, a maps.app.goo.gl share link, a cid link or a Place ID. Search links aren't places: find the places first with the Google Maps leads scraper. - `maxReviewsPerPlace` (integer, optional): Max reviews per place. Stops each place after this many reviews. Leave it empty for every review. - `sort` (string, optional, default "newest", one of "newest", "most_relevant", "highest_rating", "lowest_rating"): Sort by. Newest is the only order that lets Newer than stop a place early. - `newerThan` (string, optional): Newer than. A UTC date such as 2026-01-31, or a period back from now such as 24h, 7d or 6m. Leave it empty for reviews of any age. - `olderThan` (string, optional): Older than. Only reviews written before this point, in the same formats as "Newer than". With both, you get one period, such as 2026-01-01 to 2026-07-01. Leave empty for reviews up to now. - `language` (string, optional, default "en"): Language. Reviews in other languages are translated into this one, such as en or fr. The original text is kept. - `stars` (array, optional): Stars. Keep only reviews with these star ratings, such as 1 and 5 together. Leave empty for all. - `reviewKeywords` (array, optional): Reviews mentioning. Add words to get only reviews that mention one of them, such as "parking", "delivery" or "rude". Whole words, in the language each review was written in; a phrase such as "front desk" is matched as a phrase. Capitals don't matter, and a word typed with its accents ("délicieux") is also found without them. - `thoroughSearch` (boolean, optional, default false): Thorough search. Also find your words inside longer words ("park" finds "parking") and in Google's translations of reviews written in other languages. Slower on big places. Turn it on for hotels and tourist spots, where many reviews are in other languages. - `onlyWithText` (boolean, optional, default false): Only reviews with text. Leave out star-only reviews that have no written text. - `onlyWithPhotos` (boolean, optional, default false): Only reviews with photos. Keep only reviews that include at least one photo. - `reviewerDetails` (boolean, optional, default true): Reviewer names and profiles. Turn off to leave out who wrote each review (name, profile link, photo), for example for GDPR. Ratings, text and dates stay. - `countAllReviews` (boolean, optional, default false): Count every review. Read each place's whole review list first and put the number found in "Reviews counted", next to Google's own count. Slower on places with thousands of reviews; you still get only the reviews your other settings ask for. - `maxResults` (integer, optional): Max results. Stops the whole run after this many reviews, across all places. Use it to cap what a run can cost. - `originalDates` (boolean, optional, default false): Original dates of edited reviews ($). Look up when each edited review was first posted, in Original date. Found for most edited reviews: 3 in 4 to 9 in 10 in our tests. - `minRating` (integer, optional): Min stars. Replaced by "Stars"; still keeps reviews with at least this many stars when "Stars" is empty. - `maxRating` (integer, optional): Max stars. Keeps reviews with at most this many stars. 2 keeps the negative ones. Example input: ```json { "urls": [ "https://www.google.com/maps/place/Katz's+Delicatessen/@40.7222372,-73.9874322,17z" ], "maxReviewsPerPlace": 20, "maxResults": 20, "sort": "newest", "language": "en", "onlyWithText": true } ``` ## Output: one row per review 55 fields in 11 groups. ### Review - `rating`: Stars. Star rating, 1 to 5. - `text`: Review text. Review text, in the language you chose when Google translated it. - `original_text`: Original text. The text as the reviewer wrote it, when Google translated it. Empty when the review is already in your language. - `original_language`: Original language. Language code of the text as written, such as en or fr. - `published_at`: Date. When the review was published, ISO 8601 in UTC. For an edited review Google gives only the time of the last edit, so this is the edit date (see Edited). - `published_at_relative`: Date as shown. The date as Google shows it, such as "3 weeks ago". - `is_edited`: Edited. Whether the reviewer edited the review, from Google's "Edited" label. Empty for a language whose label we don't have. - `edited_at`: Edited at. When the review was last edited, ISO 8601 in UTC. Google gives no original date for an edited review. - `visited_in`: Visited in. Month of the visit the reviewer gave, such as "Oct 2026". - `likes_count`: Likes. Number of people who found the review helpful. ### Original dates (add-on) - `review_id`: Review ID. Google review ID. - `rating`: Stars. Star rating, 1 to 5. - `is_edited`: Edited. Whether the reviewer edited the review, from Google's "Edited" label. Empty for a language whose label we don't have. - `original_published_at`: Original date. Add-on: when an edited review was first posted, ISO 8601 in UTC, from the reviewer's profile. Filled when "Original dates of edited reviews" is on and the review was found there. - `edited_at`: Edited at. When the review was last edited, ISO 8601 in UTC. Google gives no original date for an edited review. - `published_at_relative`: Date as shown. The date as Google shows it, such as "3 weeks ago". ### Topic ratings and photos - `aspects`: Aspect ratings. Ratings of aspects and answers to Google's questions, such as {"Food": 5, "Service": 4, "Meal type": "Dinner"}. - `photos`: Photos. Links to the photos attached to the review. ### Owner reply - `owner_response`: Owner response. The owner's reply to the review. - `owner_response_at`: Owner response date. When the owner replied, ISO 8601 in UTC. - `owner_response_relative`: Owner response date as shown. When the owner replied, as Google shows it, such as "2 days ago". ### Reviewer - `reviewer_name`: Reviewer. Name of the reviewer. - `reviewer_id`: Reviewer ID. Google contributor ID of the reviewer. - `reviewer_url`: Reviewer URL. Link to the reviewer's Google Maps profile. - `reviewer_photo_url`: Reviewer photo. Reviewer's profile picture. - `reviewer_reviews_count`: Reviewer's reviews. How many reviews the reviewer has written. - `reviewer_is_local_guide`: Local Guide. True when the reviewer is a Google Local Guide. ### Place - `place_name`: Place. Name of the place. - `place_category`: Place category. Main Google category of the place. - `place_categories`: Place categories. Every Google category of the place, the main one first. - `place_status`: Place status. operational, temporarily_closed or permanently_closed. - `place_phone`: Place phone. The place's phone number as Google shows it. - `place_website`: Place website. The place's website. - `place_rating`: Place rating. Average star rating of the place. - `place_reviews_count`: Place reviews. Number of reviews Google shows for the place, or null when Google leaves it out. ### Place location - `place_name`: Place. Name of the place. - `place_address`: Place address. Address of the place. - `place_street`: Place street. Street and number of the place. - `place_city`: Place city. City of the place. - `place_postal_code`: Place postal code. Postal code of the place. - `place_state`: Place state. State or region of the place, when Google gives one. - `place_country_code`: Place country. Two-letter country code of the place, such as US or FR. - `place_lat`: Place latitude. Latitude of the place. - `place_lng`: Place longitude. Longitude of the place. ### Place hours and more - `place_name`: Place. Name of the place. - `place_opening_hours`: Place opening hours. Weekly hours, Monday first: [{"day": "Monday", "hours": "8 AM-6 PM"}, ...]. - `place_description`: Place description. The owner's description of the place, or Google's own summary. - `place_main_image_url`: Place photo. The place's main photo. - `place_price_level`: Place price level. Price level as Google shows it, such as $$. Mostly for hotels; Google shows it for few other places. - `place_hotel_stars`: Hotel stars. A hotel's star class. - `place_hotel_amenities`: Hotel amenities. A hotel's amenities, such as Free Wi-Fi or Indoor pool. ### Place review summary - `place_name`: Place. Name of the place. - `place_rating`: Place rating. Average star rating of the place. - `place_reviews_count`: Place reviews. Number of reviews Google shows for the place, or null when Google leaves it out. - `place_reviews_counted`: Reviews counted. Every review in the place's list, counted by reading all of it, when "Count every review" is on. - `place_reviews_distribution`: Reviews per star. How many reviews gave each star rating: {"one_star": 52, ..., "five_stars": 1458}. - `place_review_tags`: Review topics. Topics Google finds in the reviews and how many reviews mention each: [{"tag": "live music", "count": 162}, ...]. - `place_review_highlights`: Review highlights. The short quotes from reviews Google shows on the place, with their rating and review ID. ### Google IDs and links - `review_id`: Review ID. Google review ID. - `review_url`: Review URL. Link to the review on Google Maps. - `place_id`: Place ID. Google Place ID (ChIJ...). - `place_cid`: Place CID. Google Maps customer ID (cid) of the place. - `place_url`: Place URL. Link to the place on Google Maps. ### Search details - `source_url`: Place you typed. The place link or Place ID you typed that this review came from. - `scraping_time`: Scraped at. When the row was scraped, ISO 8601 in UTC. ## How it works 1. Pick the places. Copy each place's link from Google Maps, or type its Place ID. Add as many places as you like. 2. Every review, not just 5. Google's official way to get reviews stops at 5 per place. The scraper reads every review Google shows, newest first or in the order you pick, translated into your language. 3. Keep only the reviews you want. Filter by date, stars, text or photos. Reviews you filter out are free. 4. Download your reviews. As a spreadsheet or in Google Sheets, once or every day to catch new reviews. ## Use cases - Reputation monitoring: New reviews of your locations every day, so the bad ones are caught early. - Competitor research: What customers praise and criticise at competing businesses, in their own words. - Sentiment analysis: Thousands of reviews, already translated into one language, for sentiment or topic analysis. - Answering customers: The reviews with no owner reply, or the negative ones, across all your branches. ## Good to know You get Google reviews only: reviews Google shows from partner sites such as Tripadvisor aren't included. Google's review count includes reviews it later hides, so you can get somewhat fewer rows than the count. Photo and profile picture links stop working after a while, so download the images soon if you need them. ## Questions ### Is it legal to scrape Google Maps reviews? The scraper reads only what Google shows publicly to visitors who are not logged in. Reviews are still personal data of the people who wrote them: their names, profile pictures and words. If you are in the EU or handle data of people there, the GDPR applies, and other countries have similar laws. Make sure you have a lawful reason to collect and use the data, keep only what you need, and ask a lawyer if you are unsure. ### Do I need a Google account or an API key? No. You don't need a Google account, a login, cookies or a Google Places API key, and there is no proxy to set up. The official Places API returns at most 5 reviews per place; this scraper returns all of them. ### How many reviews can I get from one place? Every review Google shows to visitors, in the order you choose. In our tests the scraper read 2,338 reviews of three places in under a minute. Google's review count can include reviews it later hides or filters, so you can get somewhat fewer rows than the review count Google shows for the place. To check, turn on Count every review for the exact number you can get, in place_reviews_counted. ### Can I get only the new reviews, for example every day? Yes. Set Newer than to 24h (or to a date) and schedule the scraper to run every day. With Sort by on Newest, it stops at the first older review, so each run gets and charges only the new reviews. ### Can I get the reviews of one period? Yes. Set Newer than and Older than: 2026-01-01 and 2026-07-01 give the reviews of the first half of 2026. Durations work too, so 1y and 6m give the reviews from a year ago to six months ago. An edited review counts by the date of its last edit (see below). ### What date does an edited review have? The date of its last edit. Google keeps only that time for an edited review, so published_at is the edit date, is_edited is true and edited_at repeats it. Turn on the add-on Original dates of edited reviews to get when it was first posted, in original_published_at: the scraper finds it on the reviewer's profile for most edited reviews (3 in 4 to 9 in 10 in our tests, depending on the place), and you pay only for the ones it finds. In our tests 9 to 16% of a place's reviews had been edited. Newer than and Older than use this date too, so a review edited yesterday counts as yesterday's. ### Do Highest rating and Lowest rating give every review? Yes, sorted by stars, newest first within a star. Google's own rating sort stops after a sample: for one garage with 1,085 reviews it gave 145, only 76 of its 1,014 five-star reviews. Highest rating is quick. Lowest rating can take a few minutes on places with thousands of reviews, because their 1-star reviews are spread across all of them. You pay only for the reviews you get. ### Does Reviews mentioning find reviews written in other languages? It finds your words as each reviewer wrote them, so parking finds reviews written in English and poulet finds reviews written in French. Google's translations aren't searched: on a Paris restaurant, chicken found 108 reviews written in English, and Thorough search found 169, adding the French reviews Google translates as "chicken". Turn on Thorough search for hotels and tourist spots, where many reviews are in other languages. Type words with their accents (délicieux): they're also found without them. ### Can I keep only the bad reviews? Yes. In Stars, pick 1 and 2 for the negative reviews, or 4 and 5 for the good ones. To find complaints about something, add words to Reviews mentioning, such as parking, wait or rude. You can also leave out reviews that have no text, or keep only reviews with photos. Reviews you filter out are free. ### Can I leave out who wrote each review? Yes. Turn off Reviewer names and profiles and the rows have no reviewer name, contributor ID, profile link or picture, for example for GDPR work. The rating, text, dates and the reviewer's review count and Local Guide badge stay. ### Are reviews in other languages translated? Yes. Google translates them into the language you choose, English by default. When a review was translated, you also get the text as the reviewer wrote it, and every review comes with the language it was written in. ### Are reviews from Tripadvisor and other sites included? No. You get Google reviews only: the review feed Google serves to visitors who are not logged in doesn't include reviews from partner sites. ### What happens when a run fails? The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 full details) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both. ## Run it - In Apify Console: https://apify.com/keklik/google-maps-reviews-scraper - With the Apify API: POST https://api.apify.com/v2/acts/keklik~google-maps-reviews-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN with the input JSON as the body. It returns the rows. - From an AI agent: connect the Apify MCP server (https://mcp.apify.com), add the Actor `keklik/google-maps-reviews-scraper` and call it with the input. --- # Scraper: LinkedIn Jobs Scraper > Get every LinkedIn job posting for a role and a place, with company, salary, full description, applicant count and the recruiter who posted it. LinkedIn Jobs Scraper collects the job postings for a job title and a place, or from any LinkedIn job search link with your filters already set. Each job is one row with its title, company, location, salary when it’s shown, and the date posted. Full descriptions, seniority, applicant count and company details are optional add-ons. It needs no LinkedIn account. - Web page: https://keklik.io/scrapers/linkedin-jobs-scraper - Apify Actor: `keklik/linkedin-jobs-scraper` (https://apify.com/keklik/linkedin-jobs-scraper) - You enter: A job title and a place, or a LinkedIn job search link - You get: Job title, company, location, salary, date posted and the job link - Status: working, last tested 11 Nov 2026 - Needs: an Apify account (free is enough to try). No login to the site itself. ## Price per 1,000 jobs US dollars, on each Apify plan. Apify's platform costs are included. Add-ons are charged only when switched on in the input. | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Job | $0.25 | $0.22 | $0.20 | $0.17 | | Full job details (add-on): Description, seniority, job type and applicant count | $0.13 | $0.12 | $0.10 | $0.09 | | Company details (add-on): Website, size, headquarters and industry of the company | $0.50 | $0.45 | $0.40 | $0.35 | Apify's plans and a calculator: https://keklik.io/pricing.md ## Input The run input is a JSON object with these keys: - `urls` (array, optional): LinkedIn job search or job URLs. Paste the URL of a job search from linkedin.com/jobs (with your keywords, location and filters), or the URL of a single job posting (linkedin.com/jobs/view/...). One search URL gives up to 1,000 jobs. - `searchTerms` (array, optional): Or: job titles or keywords. Job titles or keywords to search, such as "data analyst" or "nurse". Each one is its own search, in the location below. - `location` (string, optional): Location. Where to search for the keywords above: a country, region or city, such as "United States", "London" or "Île-de-France". - `datePosted` (string, optional, default "any", one of "any", "past24h", "pastWeek", "pastMonth"): Date posted. Only jobs posted in this window. A search URL that already has its own date filter keeps it. - `workplaceTypes` (array, optional): Workplace. On-site, remote or hybrid. LinkedIn's logged-out search ignores this filter, so the scraper adds the words to the search keywords instead ("Remote accountant"); expect closer matches, not an exact filter. - `jobTypes` (array, optional): Job type. Full-time, part-time, contract and so on. Added to the search keywords, like Workplace. - `experienceLevels` (array, optional): Experience level. Internship to executive. Added to the search keywords, like Workplace. - `easyApplyOnly` (boolean, optional, default false): Easy Apply only. Only jobs you can apply to on LinkedIn. - `under10Applicants` (boolean, optional, default false): Fewer than 10 applicants. Only jobs with fewer than 10 applicants so far. - `postedSince` (string, optional): Posted since. Only jobs posted since then: 12h, 3d or 2w back from the start of the run, or a date such as 2026-10-01. Use it for daily or weekly runs that only want new jobs. - `excludeTitles` (array, optional): Skip job titles containing. Words that drop a job when its title contains them, such as "senior" or "intern". Not case-sensitive. Skipped jobs are free. - `excludeCompanies` (array, optional): Skip companies. Company names to drop, written as LinkedIn shows them. Not case-sensitive. Skipped jobs are free. - `jobDetails` (boolean, optional, default true): Full job details. Open each job's page for the full description, seniority, employment type, industries, applicant count, apply type, parsed salary and the job poster. Charged per job that gets them. - `companyDetails` (boolean, optional, default false): Company details. Add the hiring company's website, industry, size, employee and follower counts, headquarters, founding year, type, specialties and description from its LinkedIn page. Charged per job that gets them. - `maxJobsPerSearch` (integer, optional, default 1000): Max jobs per search. Stop each search after this many jobs. LinkedIn shows at most 1,000 jobs per search; to get more, split it into narrower searches (by location or keyword). - `maxResults` (integer, optional): Max jobs in total. Stop the whole run after this many jobs. Leave empty for no limit. Example input: ```json { "searchTerms": [ "sales representative", "accountant", "project manager", "customer service" ], "location": "United States", "maxJobsPerSearch": 300, "jobDetails": true, "companyDetails": true, "datePosted": "any" } ``` ## Output: one row per job 42 fields in 7 groups. ### Job - `title`: Title. Job title. - `job_id`: Job ID. LinkedIn's numeric job ID. - `url`: Job URL. Link to the job posting on LinkedIn. - `location`: Location. Job location, as LinkedIn shows it. - `posted_at`: Posted on. Date the job was posted (YYYY-MM-DD). - `posted_time_ago`: Posted. When the job was posted, as LinkedIn says it ("3 days ago"). - `benefits`: Highlight. Highlight under the job card, such as "Actively Hiring" or "Medical insurance". ### Company - `title`: Title. Job title. - `company_name`: Company. Hiring company, as LinkedIn shows it. - `company_url`: Company page. The company's LinkedIn page. - `company_logo`: Company logo. Company logo image URL. - `company_id`: Company ID. LinkedIn's numeric company ID. Full job details or company details. ### Salary - `title`: Title. Job title. - `salary`: Salary. Salary as LinkedIn shows it, when the employer gives one. - `salary_min`: Salary min. Lowest salary of the range. Full job details. - `salary_max`: Salary max. Highest salary of the range. Full job details. - `salary_currency`: Salary currency. Three-letter currency code, such as USD or GBP. Full job details. - `salary_period`: Salary period. year, month, week, day or hour. Full job details. ### Full job details (add-on) - `title`: Title. Job title. - `description`: Description. Full job description as text, with paragraphs and bullet points kept. Full job details. - `description_html`: Description (HTML). Full job description as HTML. Full job details. - `seniority_level`: Seniority level. Seniority level, such as "Entry level" or "Mid-Senior level". Full job details. - `employment_type`: Employment type. Employment type, such as "Full-time" or "Contract". Full job details. - `industries`: Industries. Industries of the job. Full job details. - `applicants_count`: Applicants. Number of applicants LinkedIn shows (a floor: "Over 200 applicants" gives 200). Full job details. - `apply_type`: Apply type. easy_apply (apply on LinkedIn) or external (apply on the company site). Full job details. ### Job poster (add-on) - `title`: Title. Job title. - `poster_name`: Job poster. Name of the person who posted the job, when LinkedIn shows them. Full job details. - `poster_title`: Job poster headline. The job poster's LinkedIn headline. Full job details. - `poster_profile_url`: Job poster profile. The job poster's LinkedIn profile. Full job details. - `poster_photo`: Job poster photo. The job poster's photo URL. Full job details. ### Company details (add-on) - `title`: Title. Job title. - `company_website`: Company website. The company's website. Company details. - `company_industry`: Company industry. The company's industry. Company details. - `company_size`: Company size. Company size band, such as "1,001-5,000 employees". Company details. - `company_employees_count`: Employees on LinkedIn. Number of employees with a LinkedIn profile at the company. Company details. - `company_followers_count`: Company followers. Followers of the company's LinkedIn page. Company details. - `company_founded`: Founded. Year the company was founded. Company details. - `company_headquarters`: Headquarters. The company's headquarters city and region. Company details. - `company_type`: Company type. Such as "Public Company" or "Privately Held". Company details. - `company_specialties`: Specialties. The company's specialties. Company details. - `company_description`: Company description. The company's About text. Company details. - `company_tagline`: Company tagline. The company's tagline. Company details. ### Search details - `title`: Title. Job title. - `search_keywords`: Search keywords. Keywords of the search that found the job, with any added filter words. - `search_location`: Search location. Location of the search that found the job. - `source_url`: Input. The search URL, job URL or keyword search the job came from. - `scraping_time`: Scraped at. When the job was scraped (UTC, ISO 8601). ## How it works 1. Type the role and where. Or paste a LinkedIn job search with your filters already set. 2. Up to 1,000 jobs per search. That is the most LinkedIn shows. Split a big search by city or keyword for more, and a job found twice appears once. 3. Keep only the jobs you want. Filter by date posted, Easy Apply and applicant count, or leave out job titles and companies you don't want. 4. Download your list. As a spreadsheet, in Google Sheets, or into your ATS or CRM. ## Use cases - Selling to companies that are hiring: Companies hiring for the roles you sell to, such as accountants or engineers, as a reason to reach out now. - Salary and job market research: Salaries, seniority and locations across postings, to see what a role pays and where the demand is. - Job boards and alerts: Fresh postings every day for a niche job board, or an alert you send to candidates. - Watching competitors: The roles your competitors are hiring for, and where, as a sign of where they’re growing. ## Good to know LinkedIn shows at most 1,000 jobs for one search, so split a big search by city or keyword. Salary is there only when the employer published it. ## Questions ### Is it legal to scrape LinkedIn jobs? This scraper collects only job postings that LinkedIn shows publicly to visitors who are not logged in. Some fields, such as the job poster's name, are personal data, which laws such as the GDPR and CCPA protect. Make sure you have a lawful reason to collect and use it. If you are unsure, ask a lawyer. ### Do I need a LinkedIn account? No. You don't need a LinkedIn account, a login or cookies, and the scraper never uses yours. ### How many jobs can I get from one search? LinkedIn shows at most 1,000 jobs per search, logged in or not. To get more, split the search: one search per city instead of one per country, or one per keyword. Each search URL or keyword in the input is its own search, and a job found by two searches is saved once. ### Do all LinkedIn filters work? Date posted, Easy Apply, Fewer than 10 applicants, company and location filters work as on LinkedIn. Workplace (remote, hybrid), Job type and Experience level don't: LinkedIn ignores them for logged-out visitors. The scraper adds their words to the search keywords instead, for example "Remote (Full-time OR Part-time) accountant", which brings closely matching jobs but is not an exact filter. Check employment_type and seniority_level in the results if you need to be strict. Sorting by "Most recent" is also ignored by LinkedIn; use Posted since or Date posted instead. ### What happens when a run fails? The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 full details) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both. ## Run it - In Apify Console: https://apify.com/keklik/linkedin-jobs-scraper - With the Apify API: POST https://api.apify.com/v2/acts/keklik~linkedin-jobs-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN with the input JSON as the body. It returns the rows. - From an AI agent: connect the Apify MCP server (https://mcp.apify.com), add the Actor `keklik/linkedin-jobs-scraper` and call it with the input. --- # Scraper: Rightmove Estate Agents Scraper > Get every estate and letting agent on Rightmove in any UK town, county or postcode, with phone numbers, address and services, plus how many homes each one has for sale and to let. Rightmove Estate Agents Scraper finds every estate and letting agent branch on Rightmove in the UK towns, counties or postcodes you type, with phone numbers, address and services. Switch on full details to add how many homes each branch has for sale and to let right now, its recent sales and lets, and the company behind it. - Web page: https://keklik.io/scrapers/rightmove-agents-scraper - Apify Actor: `keklik/rightmove-agents-scraper` (https://apify.com/keklik/rightmove-agents-scraper) - You enter: UK towns, counties or postcodes - You get: Branch name, brand, phone numbers, address, postcode and services - Status: working, last tested 11 Nov 2026 - Needs: an Apify account (free is enough to try). No login to the site itself. ## Price per 1,000 agent branches US dollars, on each Apify plan. Apify's platform costs are included. Add-ons are charged only when switched on in the input. | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Agent branch: Each agent branch the scraper saves. | $0.75 | $0.70 | $0.60 | $0.50 | | Full branch details (add-on): Only when full details are on, and only for branches whose profile loaded. Charged on top of the branch itself. | $0.75 | $0.70 | $0.60 | $0.50 | Apify's plans and a calculator: https://keklik.io/pricing.md ## Input The run input is a JSON object with these keys: - `locations` (array, optional): Locations. Towns, cities, counties or postcode districts, such as Manchester, Surrey or SW11. Each one is matched to the nearest Rightmove location. - `startUrls` (array, optional): Rightmove estate agent URLs. Optional. A "Find an agent" search or a single branch page copied from rightmove.co.uk. You can use these instead of Locations or as well as them. - `radius` (string, optional, default "0", one of "0", "0.25", "0.5", "1", "3", "5", "10", "15", "20", "30", "40"): Search radius. How far around each location to look, up to 40 miles. Pasted search URLs ignore it and keep their own radius. - `agentType` (string, optional, default "ALL", one of "ALL", "SALES", "LETTINGS"): Agent type. All agents, or only the ones doing sales or lettings. A pasted branch page is always returned. - `brandName` (string, optional): Agent name filter. Keeps only branches whose agent name matches, for example Foxtons. It works with Locations only. - `fetchBranchDetails` (boolean, optional, default false): Fetch full branch details. Adds the full branch profile. It is charged per branch on top of the branch itself and makes the run slower. - `maxResults` (integer, optional): Max results. Stops after this many branches in total. Leave it empty to collect every branch. Runs on the Apify Free plan stop at 100. Example input: ```json { "locations": [ "London" ], "fetchBranchDetails": true, "maxResults": 600, "proxyConfiguration": { "useApifyProxy": true }, "radius": "0", "agentType": "ALL" } ``` ## Output: one row per agent branch 42 fields in 8 groups. ### Branch - `name`: Agent branch. Agent and branch name, such as "Abatoria, Wapping". - `brand`: Brand. The agent's brand. - `branch`: Branch name. The branch, such as "Wapping". - `company_type`: Company type. iea (independent estate agent), ila (independent letting agent), corporate, commercial or buildtorent. - `sales`: Does sales. True when the branch sells homes. - `lettings`: Does lettings. True when the branch lets homes. - `logo`: Logo. Link to the branch logo. - `summary`: Summary. Short description of the branch. ### Contact and address - `phone`: Direct phone. The branch's own phone line. - `sales_phone`: Sales phone. The number Rightmove shows for sales. - `lettings_phone`: Lettings phone. The number Rightmove shows for lettings. - `address`: Address. Full branch address. - `postcode`: Postcode. Branch postcode. - `contact_url`: Enquiry form. Link to the branch's enquiry form on Rightmove. ### Company and map location (add-on) - `details.company_name`: Registered company. The company behind the branch. - `details.trading_name`: Trading name. The name the agent trades under. - `details.postcode`: Postcode (profile). Postcode from the branch profile. - `details.latitude`: Latitude. Latitude of the branch. - `details.longitude`: Longitude. Longitude of the branch. ### All services (add-on) - `details.services.sales`: Sales service. True when the branch sells homes. - `details.services.lettings`: Lettings service. True when the branch lets homes. - `details.services.commercial`: Commercial. True when the branch handles commercial property. - `details.services.build_to_rent`: Build to rent. True for a build-to-rent operator. - `details.services.overseas`: Overseas property. True when the branch handles property abroad. - `details.services.new_homes`: New homes. True when the branch sells new homes. ### Properties listed now (add-on) - `details.for_sale.count`: For sale now. Number of properties the branch has for sale right now. - `details.for_sale.url`: For sale link. Link to those listings on Rightmove. - `details.to_let.count`: To let now. Number of properties the branch has to let right now. - `details.to_let.url`: To let link. Link to those listings on Rightmove. ### Recent sales and lets (add-on) - `details.recently_sold`: Recently sold. Recent sales: address, price, status, bedrooms, bathrooms and property type. - `details.recently_let`: Recently let. Recent lets: address, price, status, bedrooms, bathrooms and property type. ### Descriptions and memberships (add-on) - `details.description`: Full description. The branch's full description. - `details.sales_description`: Sales description. The branch's description of its sales service. - `details.lettings_description`: Lettings description. The branch's description of its lettings service. - `details.affiliations`: Memberships. Industry bodies the branch belongs to, such as NAEA and ARLA. - `details.testimonials`: Testimonials. Number of customer testimonials. - `details.network_branches`: Network branches. Number of other branches in the same network. ### Search and Rightmove IDs - `search_location`: Searched location. The location you typed that found this branch. - `id`: Branch ID. Rightmove branch ID. - `company_id`: Company ID. Rightmove company ID. - `brand_id`: Brand ID. Rightmove brand ID. - `url`: Rightmove page. The branch's page on Rightmove. ## How it works 1. Type where. Add more towns, counties or postcodes and each one is searched. A branch found twice appears once. 2. Keep only the agents you want. Choose sales or lettings agents, look up to 40 miles around, or keep one brand's branches, such as Foxtons. 3. See how busy each branch is. Switch on full details for the homes each branch has for sale and to let right now, its recent sales and lets, and the company behind it. 4. Download your list. As a spreadsheet, in Google Sheets, or into your CRM. ## Use cases - Prospect lists for selling to agents: Branches with phone numbers and postcodes for anyone whose customers are agents: software vendors, property photographers, EPC assessors, conveyancers and mortgage brokers. - Mapping a local market: See which agents operate in a town or county, how many are independent and how many belong to a chain, and where agents are thin on the ground. - Ranking branches by stock: With full details on, compare how many homes each branch has for sale and to let today, next to its recent sales and lets. - Covering one agent group: Every branch of a national brand in the areas you serve, for account-based outreach. ## Good to know Runs on the Apify Free plan stop at 100 branches. Any paid Apify plan lifts that cap. Rightmove doesn't publish agents' email addresses or websites, so they are not in the data. ## Questions ### Is it legal to scrape Rightmove? The scraper only collects information that Rightmove shows publicly to every visitor: business listings of estate and letting agents. Branch phone numbers and addresses are business contact details, but some agents are sole traders, so the data can still count as personal data. If you store or contact agents in the UK or EU, follow UK GDPR and PECR, have a legitimate reason, and offer an opt-out. Check with a lawyer if you are unsure. ### Do I need a Rightmove account? No. The scraper needs no Rightmove account, login or cookies. ### Can I get agent email addresses or websites? No. Rightmove does not publish agent email addresses or websites, so they are not in the data. To reach a branch, use its phone numbers or its contact_url, which opens the branch's enquiry form on Rightmove. ### How do I get every agent in a city or county? Enter it in Locations, for example Surrey or London, and leave Max results empty. To widen the area around a town or postcode, set Search radius. ### How do I find only lettings agents, or all branches of one brand? Set Agent type to lettings agents only (or sales agents only). For one brand, put its name in Agent name filter, for example Foxtons, and add the area in Locations. ### Can I see how many properties each agent has? Yes. Turn on Fetch full branch details to add how many properties each branch has for sale and to let right now, with links to those listings, plus its recently sold and let properties, its registered company name and where it is on a map. It is charged per branch, only for branches whose full profile loaded. ### Why is a phone number empty? Rightmove doesn't show every number for every branch. A branch that only does sales normally has no lettings phone. ### What happens when a run fails? The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 full details) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both. ## Run it - In Apify Console: https://apify.com/keklik/rightmove-agents-scraper - With the Apify API: POST https://api.apify.com/v2/acts/keklik~rightmove-agents-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN with the input JSON as the body. It returns the rows. - From an AI agent: connect the Apify MCP server (https://mcp.apify.com), add the Actor `keklik/rightmove-agents-scraper` and call it with the input. --- # Scraper: Rightmove Property Scraper > Paste any Rightmove search and get every listing in it, with price, address, bedrooms, photos and the agent's phone, plus the full postcode, council tax and floor area when you want them. Rightmove Property Scraper takes any Rightmove search link (for sale, to rent, new homes, student or commercial) and returns every listing on it, up to the 1,008 Rightmove shows for one search. Each listing is one row with price, address, bedrooms, property type, photos and the agent’s phone. Full postcode, council tax band, lease details, floor area, nearest stations and floorplans are an optional add-on. - Web page: https://keklik.io/scrapers/rightmove-scraper - Apify Actor: `keklik/rightmove-scraper` (https://apify.com/keklik/rightmove-scraper) - You enter: A Rightmove search link with your filters set - You get: Price, address, bedrooms, property type, photos, agent and phone - Status: working, last tested 11 Nov 2026 - Needs: an Apify account (free is enough to try). No login to the site itself. ## Price per 1,000 listings US dollars, on each Apify plan. Apify's platform costs are included. Add-ons are charged only when switched on in the input. | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Property listing: Each listing the scraper saves. | $0.75 | $0.70 | $0.60 | $0.50 | | Full property details (add-on): Only when full details are switched on. Charged once per listing on top of the listing itself. | $0.75 | $0.70 | $0.60 | $0.50 | | Agent profile (add-on) | $0.75 | $0.70 | $0.60 | $0.50 | Apify's plans and a calculator: https://keklik.io/pricing.md ## Input The run input is a JSON object with these keys: - `startUrls` (array, optional): Rightmove search URLs. Search results pages from rightmove.co.uk. Choose the location, price range and filters on the site, then copy the address from your browser. - `locations` (array, optional): Locations. Towns, cities, areas, postcodes, postcode districts or stations, one per line, such as Manchester, Camden, SW1A 1AA, M1 or Kings Cross Station. Each one becomes its own search, using Rightmove's best match for the name. A Rightmove location ID such as REGION^904 also works. For overseas, type a country or region instead, such as Spain or Costa del Sol. - `searchType` (string, optional, default "sale", one of "sale", "rent", "newHomes", "students", "commercialSale", "commercialRent", "overseas", "soldPrices", "agents"): Search for. Which Rightmove search to run for the locations. Overseas takes a country or region, such as Spain, Portugal or Costa del Sol. Sold house prices gives one row per home with every sale since 1995. Estate agents gives one row per agent branch. - `radius` (string, optional, default "0.0", one of "0.0", "0.25", "0.5", "1.0", "3.0", "5.0", "10.0", "15.0", "20.0", "30.0", "40.0"): Radius. How far around each location to search. - `minPrice` (integer, optional): Min price (£). Lowest price. For rentals, the monthly rent. For overseas, in pounds. - `maxPrice` (integer, optional): Max price (£). Highest price. For rentals, the monthly rent. For overseas, in pounds. - `minBedrooms` (integer, optional): Min bedrooms. Fewest bedrooms. 0 includes studios. - `maxBedrooms` (integer, optional): Max bedrooms. Most bedrooms. - `minBathrooms` (integer, optional): Min bathrooms. Fewest bathrooms. - `maxBathrooms` (integer, optional): Max bathrooms. Most bathrooms. - `propertyTypes` (array, optional): Property types. Only these types of home. Leave empty for all. For sold house prices: detached, semi-detached, terraced and flat, one search each. - `commercialSectors` (array, optional): Commercial sectors. For commercial searches: only these sectors, as Rightmove groups them. Leave empty for all. - `minSize` (integer, optional): Min size (sq ft). Smallest floor area in square feet. Mostly for commercial property; homes without a size are left out. - `maxSize` (integer, optional): Max size (sq ft). Largest floor area in square feet. - `tenureTypes` (array, optional): Tenure. Only these tenures. Leave empty for all. For sold house prices: freehold or leasehold, one of them. - `mustHave` (array, optional): Must have. Only listings with all of these. - `dontShow` (array, optional): Don't show. Leave out listings with any of these. - `includeUnderOffer` (boolean, optional, default false): Include Sold STC, Under offer and Let agreed. Also return homes already sold subject to contract, under offer or let agreed. Off: only homes still available, as on Rightmove. - `furnishTypes` (array, optional): Furnishing. For rentals: only these. Leave empty for all. - `shortTermLets` (boolean, optional, default false): Short-term lets only. For rentals: only short-term lets. - `moveInBy` (string, optional): Move in by. For rentals: only homes available to move in by this date. - `sortBy` (string, optional, one of "newest", "oldest", "lowestPrice", "highestPrice", "smallest", "largest"): Sort by. Order of the results. With a Listed after date the search is always newest first. Leave empty for Rightmove's default. For sold house prices: lowest or highest price; otherwise most recently sold first. - `soldInYears` (integer, optional): Sold in the last (years). For sold house prices: only homes sold in this many years. Leave empty for every sale since 1995. - `agentType` (string, optional, default "ALL", one of "ALL", "SALES", "LETTINGS"): Agent type. For estate agents: every branch, or only those that handle sales or lettings. - `brandName` (string, optional): Agent name. For estate agents: only branches of agents whose name matches, such as Foxtons. - `listedAfter` (string, optional): Listed after. Only listings added on or after this date (UK time), or within a span back from now such as 1 day or 2 weeks. Through the JSON input you can also give hours (24 hours) or a UTC time (2026-10-15T08:00Z). Each search is then sorted by newest so the run stops once it passes this date. Leave empty for listings added at any time. - `listedBefore` (string, optional): Listed before. Only listings added before this date. A date includes that whole day (2026-10-20 keeps listings added up to midnight UK time); a span such as 7 days keeps listings added more than 7 days ago. Leave empty for listings added up to now. - `includePriceReductions` (boolean, optional, default false): Include price reductions. Also keep older listings whose price was reduced within the dates, as Rightmove's own "Added to site" filter does. Off: only listings added within the dates. - `onlyNewOrChanged` (boolean, optional, default false): Only new or changed since the last run. Compare every row with the last run of the same search: new rows and rows whose price, status, rooms, size, tenure or label changed are saved, each with a change field naming what changed, old and new. Unchanged rows are left out and not charged. The first run saves everything as new, to compare the next run with. Sold prices compare the last sale; agents their name, phones, address and services. - `watchName` (string, optional): Watch name. Optional. Runs with the same name compare with each other, even if you change the search. Leave empty to compare runs with exactly the same links, locations and filters. - `resetWatch` (boolean, optional, default false): Start the watch over. Forget earlier runs: every row counts as new again, and later runs compare with this one. - `fetchPropertyDetails` (boolean, optional, default false): Fetch full property details. Opens each listing to collect the extra fields. It is charged per listing and makes the run slower. - `includeSaleHistory` (boolean, optional, default false): Include past sale prices. With full property details: also each home's past sales, the year, price and change since the sale before, from Land Registry data as Rightmove shows it. One more request per property, so a bit slower. Needs "Fetch full property details" on. - `fetchAgentProfiles` (boolean, optional, default false): Add agent profiles. Add the listing agent's full Rightmove profile to each listing: homes for sale and to let right now, recently sold and let homes, services, sales and lettings phone lines, memberships, descriptions and the branch's map position. Billed as an add-on once per agent branch per run, so many listings from one agent cost one profile. - `maxResults` (integer, optional): Max results. Stops the run after this many listings, across all your searches. - `maxPagesPerUrl` (integer, optional): Max pages per search URL. Rightmove shows about 24 listings per page. Leave it empty to read every page. Example input: ```json { "startUrls": [ { "url": "https://www.rightmove.co.uk/property-for-sale/find.html?searchLocation=London&useLocationIdentifier=true&locationIdentifier=REGION%5E87490&radius=0.0&maxPrice=500000&channel=BUY&transactionType=BUY&sortType=6" } ], "maxResults": 30, "fetchPropertyDetails": true, "proxyConfiguration": { "useApifyProxy": true } } ``` ## Output: one row per listing 193 fields in 27 groups. ### Property - `property.type`: Property type. Flat, detached, terraced, bungalow and so on. - `property.description`: Type description. Rightmove's one-line description, such as "3 bedroom flat for sale". - `property.bedrooms`: Bedrooms. Number of bedrooms. - `property.bathrooms`: Bathrooms. Number of bathrooms. - `property.size`: Size. Floor area as the agent gives it, such as "1,765 sq. ft.". - `property.size_sqft`: Floor area (sq ft). Floor area in square feet as a number, when the agent gives one. For a range of units, the smallest. - `property.size_sqm`: Floor area (m²). Floor area in square meters as a number, when the agent gives one. For a range of units, the smallest. - `property.tenure`: Tenure. Freehold, leasehold and so on, when the agent gives it. - `property.key_features`: Key features. The agent's bullet-point highlights. - `summary`: Summary. Short summary of the listing. For agent rows, a short description of the branch. - `channel`: For sale or to rent. BUY for sale, RENT to rent, or the commercial or new homes version. ### Price - `price.display`: Price. Price as Rightmove shows it, such as "£325,000" or "£800 pcm". Overseas, in the listing's own currency. - `price.amount`: Price (number). Asking price or rent as a number, in the listing's currency. - `price.currency`: Currency. Currency code: GBP, or the local one overseas, such as EUR. - `price.qualifier`: Price qualifier. Such as "Offers in excess of" or "Guide price". - `price.frequency`: Rent period. For rentals, whether the rent is monthly or weekly. - `price.per_sqft`: Price per sq ft. Asking price divided by the floor area, in pounds per square foot. For sale listings with one size. - `price.per_sqm`: Price per m². Asking price divided by the floor area, in pounds per square meter. For sale listings with one size. - `letting_fees.apply`: Letting fees apply. True when the agent says fees apply on top of the rent. - `letting_fees.text`: Letting fees. The agent's text on those fees. ### Address and location - `address`: Address. Address as Rightmove shows it. For agent rows, the branch address. - `location.latitude`: Latitude. Latitude. - `location.longitude`: Longitude. Longitude. - `location.distance_miles`: Distance (miles). Distance from the searched place, on searches around a postcode or a station. - `street_view`: Street View. True when Street View is available for the address. - `school_checker_url`: School checker. Rightmove's school checker for the property: nearby schools with their Ofsted ratings. ### Agent - `agent.name`: Agent. The agent's name. - `agent.branch_id`: Agent branch ID. Rightmove's ID for the agent branch, to join listings with agent data. - `agent.branch`: Agent branch. The agent branch, such as "Winkworth, Islington". - `agent.phone`: Agent phone. The branch's phone number for this listing. - `agent.branch_url`: Agent page. The branch's page on Rightmove. - `agent.logo`: Agent logo. Link to the agent's logo. ### Photos - `images.main`: Main photo. Link to the main photo. - `images.all`: All photos. Every photo, with its caption. - `images.count`: Photo count. Number of photos. - `images.floorplans`: Floorplan count. Number of floorplans. - `images.virtual_tours`: Virtual tour count. Number of virtual tours. ### Dates and changes - `dates.first_listed`: First listed. When the listing first appeared on Rightmove. - `dates.last_updated`: Last updated. When the listing was last updated. - `dates.added_or_reduced`: Added or reduced. Such as "Added today" or "Reduced on 16/10/2026". - `dates.is_recent`: Recently added. True when Rightmove marks the listing as recent. - `listing_update.reason`: Last change. Why the listing last changed, such as new or price reduced. - `listing_update.date`: Last change date. When the listing last changed. ### Listing labels - `status`: Status. Sold STC, Under offer or Let agreed, when Rightmove shows it. Included in the search when you tick "Include Sold STC" or "Include Let agreed" on Rightmove. - `tags.label`: Label. The label on the listing, such as "No Chain" or "Just Launched", when there is one. - `tags.featured`: Featured. True when the listing is featured. - `tags.premium`: Premium listing. True for a premium listing. - `tags.auction`: Auction. True when the property is sold at auction. - `tags.commercial`: Commercial. True for commercial property. - `tags.development`: New home. True for a new-build development. - `tags.residential`: Residential. True for residential property. - `tags.students`: Student accommodation. True for student accommodation. - `tags.online_viewings`: Online viewings. True when the agent offers online viewings. ### Full description and size (add-on) - `details.description`: Full description. The agent's full description. For agent rows, the branch's description. - `details.features` - `details.size_sqft`: Size (sq ft). Floor area in square feet. - `details.size_sqm`: Size (m²). Floor area in square meters. - `details.price_per_sqft`: Price per sq ft (as shown). Such as "£708.22 per sq ft", when the size is given. - `details.secondary_price`: Second price. A second price, when Rightmove shows one. - `details.price_numeric`: Mortgage calculator price. The price Rightmove's mortgage calculator uses. - `details.retirement`: Retirement home. True for a retirement property. - `details.business_for_sale`: Business for sale. True when a business is for sale with the property. - `details.status.published`: Live. True while the listing is live on Rightmove. - `details.status.archived`: Archived. True when the listing has been taken down. ### Postcode and nearest stations (add-on) - `details.address_detail.country_code`: Country code. Two-letter country code, GB. - `details.address_detail.uk_country`: UK country. England, Scotland, Wales or Northern Ireland. - `details.address_detail.outcode`: Postcode district. First half of the postcode, such as TW1. - `details.address_detail.incode`: Postcode end. Second half of the postcode, such as 2BT. - `details.sold_prices_url`: Sold prices nearby. Rightmove's sold house prices page for the postcode. - `details.nearest_stations`: Nearest stations. Nearby stations with their type and distance in miles. - `details.nearest_airports`: Nearest airports. Nearby airports with their distance in miles. Rightmove gives them on overseas listings only. ### Council tax, lease and charges (add-on) - `details.living_costs.council_tax_band`: Council tax band. Council tax band, A to I. - `details.living_costs.council_tax_exempt`: Council tax exempt. True when the property is exempt from council tax. - `details.living_costs.council_tax_included`: Council tax included. True when the rent includes council tax. - `details.living_costs.annual_ground_rent`: Ground rent per year. Yearly ground rent in pounds. - `details.living_costs.annual_service_charge`: Service charge per year. Yearly service charge in pounds. - `details.living_costs.ground_rent_review_years`: Ground rent review (years). How often the ground rent is reviewed, in years. - `details.living_costs.ground_rent_pct_increase`: Ground rent increase (%). How much the ground rent rises at each review. - `details.living_costs.domestic_rates`: Domestic rates. Yearly domestic rates in pounds, when the agent gives them. - `details.years_remaining_on_lease`: Lease years left. Years left on the lease. ### Floorplans, EPC and full-size photos (add-on) - `details.floorplan_urls`: Floorplans. Links to the floorplan images. - `details.epc`: EPC. Links to the energy performance certificate. - `details.brochures`: Brochures. Brochure links with their captions. - `details.image_urls`: Full-size photos. Links to every photo at full size. - `details.virtual_tours`: Virtual tours. Virtual tour links. ### Rental terms and shared ownership (add-on) - `details.shared_ownership.flag`: Shared ownership. True for a shared-ownership home. - `details.shared_ownership.percentage`: Share for sale (%). Percentage of the home for sale. - `details.shared_ownership.rent_price`: Rent on the rest. Rent on the share you don't buy. - `details.shared_ownership.rent_frequency`: Rent period (shared ownership). How often that rent is paid. - `details.lettings.deposit`: Deposit. Deposit in pounds. - `details.lettings.let_type`: Let type. Long term, short term and so on. - `details.lettings.furnish_type`: Furnishing. Furnished, unfurnished, or either. - `details.lettings.let_available_date`: Available from. When the property is available to move in. - `details.lettings.min_term_months`: Minimum term (months). Shortest tenancy the landlord accepts, in months. ### Agent office (add-on) - `details.agent_detail.company`: Agent company. The agent's company name. - `details.agent_detail.company_type`: Agent company type. independent, corporate (a chain), commercial or build to rent, as Rightmove classes the agent. - `details.agent_detail.agent_type`: Agent business. sales, lettings, sales and lettings, or commercial. - `details.agent_detail.address`: Agent address. The branch's address. - `details.agent_detail.profile_url`: Agent profile. The agent's profile page on Rightmove. ### Past sales (add-on) - `address`: Address. Address as Rightmove shows it. For agent rows, the branch address. - `price.display`: Price. Price as Rightmove shows it, such as "£325,000" or "£800 pcm". Overseas, in the listing's own currency. - `details.sale_history`: Past sales. With "Include past sale prices": the home's earlier sales, newest first, from Land Registry data as Rightmove shows it. Empty when there are none; null when they couldn't be loaded. - `details.sold_prices_url`: Sold prices nearby. Rightmove's sold house prices page for the postcode. - `url`: Listing link. Link to the listing on Rightmove. For sold-price rows, the home's sold prices page; for agent rows, the branch's page. ### Rightmove ID, link and search - `id`: Rightmove ID. Rightmove property ID. For sold-price rows, Rightmove's ID for the home; for agent rows, the branch ID. - `url`: Listing link. Link to the listing on Rightmove. For sold-price rows, the home's sold prices page; for agent rows, the branch's page. - `search_url`: Search. The search URL this listing came from. A listing found by several searches has the first. - `scraped_at`: Scraped at. When the listing was scraped, in UTC. ### Sold house prices - `address`: Address. Address as Rightmove shows it. For agent rows, the branch address. - `property.type`: Property type. Flat, detached, terraced, bungalow and so on. - `property.bedrooms`: Bedrooms. Number of bedrooms. - `last_sale.price`: Sold price. Price in pounds. - `last_sale.date`: Date sold. Date of the sale. - `last_sale.tenure`: Tenure at sale. FREEHOLD or LEASEHOLD. - `last_sale.new_build`: New build. True when the home was sold as a new build. - `all_sales`: All sales. Sold-price rows: every sale of the home since 1995, newest first. - `url`: Listing link. Link to the listing on Rightmove. For sold-price rows, the home's sold prices page; for agent rows, the branch's page. ### Agents: Overview - `logo`: Logo. Agent rows: Link to the branch logo. - `phone`: Direct phone. Agent rows: The branch's own phone line. - `sales_phone`: Sales phone. Agent rows: The number Rightmove shows for sales. - `lettings_phone`: Lettings phone. Agent rows: The number Rightmove shows for lettings. - `address`: Address. Address as Rightmove shows it. For agent rows, the branch address. - `postcode`: Postcode. Agent rows: Branch postcode. - `sales`: Does sales. Agent rows: True when the branch sells homes. - `lettings`: Does lettings. Agent rows: True when the branch lets homes. - `company_type`: Company type. Agent rows: iea (independent estate agent), ila (independent letting agent), corporate, commercial or buildtorent. - `url`: Listing link. Link to the listing on Rightmove. For sold-price rows, the home's sold prices page; for agent rows, the branch's page. ### Agents: Branch - `brand`: Brand. Agent rows: The agent's brand. - `branch`: Branch name. Agent rows: The branch, such as "Wapping". - `company_type`: Company type. Agent rows: iea (independent estate agent), ila (independent letting agent), corporate, commercial or buildtorent. - `sales`: Does sales. Agent rows: True when the branch sells homes. - `lettings`: Does lettings. Agent rows: True when the branch lets homes. - `logo`: Logo. Agent rows: Link to the branch logo. - `summary`: Summary. Short summary of the listing. For agent rows, a short description of the branch. ### Agents: Contact and address - `phone`: Direct phone. Agent rows: The branch's own phone line. - `sales_phone`: Sales phone. Agent rows: The number Rightmove shows for sales. - `lettings_phone`: Lettings phone. Agent rows: The number Rightmove shows for lettings. - `address`: Address. Address as Rightmove shows it. For agent rows, the branch address. - `postcode`: Postcode. Agent rows: Branch postcode. - `contact_url`: Enquiry form. Agent rows: Link to the branch's enquiry form on Rightmove. ### Agents: Company and map location - `details.company_name`: Registered company. Agent rows: The company behind the branch. - `details.trading_name`: Trading name. Agent rows: The name the agent trades under. - `details.postcode`: Postcode (profile). Agent rows: Postcode from the branch profile. - `details.latitude`: Latitude. Agent rows: Latitude of the branch. - `details.longitude`: Longitude. Agent rows: Longitude of the branch. ### Agents: All services - `details.services.sales`: Sales service. True when the branch sells homes. - `details.services.lettings`: Lettings service. True when the branch lets homes. - `details.services.commercial`: Commercial. True when the branch handles commercial property. - `details.services.build_to_rent`: Build to rent. True for a build-to-rent operator. - `details.services.overseas`: Overseas property. True when the branch handles property abroad. - `details.services.new_homes`: New homes. True when the branch sells new homes. ### Agents: Properties listed now - `details.for_sale.count`: For sale now. Number of properties the branch has for sale right now. - `details.for_sale.url`: For sale link. Link to those listings on Rightmove. - `details.to_let.count`: To let now. Number of properties the branch has to let right now. - `details.to_let.url`: To let link. Link to those listings on Rightmove. ### Agents: Recent sales and lets - `details.recently_sold`: Recently sold. Agent rows: Recent sales: address, price, status, bedrooms, bathrooms and property type. - `details.recently_let`: Recently let. Agent rows: Recent lets: address, price, status, bedrooms, bathrooms and property type. ### Agents: Descriptions and memberships - `details.description`: Full description. The agent's full description. For agent rows, the branch's description. - `details.sales_description`: Sales description. Agent rows: The branch's description of its sales service. - `details.lettings_description`: Lettings description. Agent rows: The branch's description of its lettings service. - `details.affiliations`: Memberships. Agent rows: Industry bodies the branch belongs to, such as NAEA and ARLA. - `details.testimonials`: Testimonials. Agent rows: Number of customer testimonials. - `details.network_branches`: Network branches. Agent rows: Number of other branches in the same network. ### Agents: Search and Rightmove IDs - `search_location`: Searched location. Agent rows: The location you typed that found this branch. - `id`: Rightmove ID. Rightmove property ID. For sold-price rows, Rightmove's ID for the home; for agent rows, the branch ID. - `company_id`: Company ID. Agent rows: Rightmove company ID. - `brand_id`: Brand ID. Agent rows: Rightmove brand ID. - `url`: Listing link. Link to the listing on Rightmove. For sold-price rows, the home's sold prices page; for agent rows, the branch's page. ### Changes since last run - `change.type`: Change. new for a row the last run didn't have, changed for one whose watched fields changed. - `change.fields`: Changed fields. For changed rows: each changed field, such as price.amount, with its old and new value. - `row_type`: Row type. listing for a property listing, sold_price for a home from a sold house prices search, agent for an estate agent branch. - `address`: Address. Address as Rightmove shows it. For agent rows, the branch address. - `price.display`: Price. Price as Rightmove shows it, such as "£325,000" or "£800 pcm". Overseas, in the listing's own currency. - `url`: Listing link. Link to the listing on Rightmove. For sold-price rows, the home's sold prices page; for agent rows, the branch's page. ### Agent profiles (add-on) - `agent.name`: Agent. The agent's name. - `agent.branch`: Agent branch. The agent branch, such as "Winkworth, Islington". - `agent_profile.sales_phone`: Sales phone. The number Rightmove shows for sales. - `agent_profile.lettings_phone`: Lettings phone. The number Rightmove shows for lettings. - `agent_profile.for_sale.count`: For sale now. Number of properties the branch has for sale right now. - `agent_profile.to_let.count`: To let now. Number of properties the branch has to let right now. - `agent_profile.recently_sold`: Recently sold. Recent sales: address, price, status, bedrooms, bathrooms and property type. - `agent_profile.recently_let`: Recently let. Recent lets: address, price, status, bedrooms, bathrooms and property type. - `agent_profile.services` - `agent_profile.affiliations`: Memberships. Industry bodies the branch belongs to, such as NAEA and ARLA. - `agent_profile.latitude`: Latitude. Latitude of the branch. - `agent_profile.longitude`: Longitude. Longitude of the branch. - `address`: Address. Address as Rightmove shows it. For agent rows, the branch address. - `url`: Listing link. Link to the listing on Rightmove. For sold-price rows, the home's sold prices page; for agent rows, the branch's page. ## How it works 1. Search Rightmove, paste the link. Set the area, price, bedrooms and property type on Rightmove, then paste the link. For sale, to rent, new homes, student and commercial searches all work. 2. Up to 1,008 listings per search. That is the most Rightmove shows for one search. Split a big area by price or property type for more, and a listing found twice appears once. 3. Add full details if you need them. Full postcode, council tax band, service charge, ground rent, years left on the lease, floor area, nearest stations, floorplans and EPC. Charged only for listings where they loaded. 4. Download your list. As a spreadsheet, in Google Sheets, or into your own tools. ## Use cases - Market research: Asking prices and price per square foot by postcode, property type or agent, tracked from one month to the next. - Finding investments: New and reduced listings every morning, with tenure, lease length and council tax band to filter on. - Leads for property services: Fresh listings with the selling agent's name and phone, for mortgage brokers, conveyancers, surveyors and removal firms. - Valuation models: Coordinates, floor area and property attributes to feed a valuation model or a market dashboard. ## Good to know Rightmove shows at most 1,008 listings for a single search (42 pages). For a bigger area, split it into several searches, for example by price band, property type or a smaller radius, and add them all. Listings that appear in more than one are removed. ## Questions ### Is it legal to scrape Rightmove? The scraper only collects what Rightmove shows publicly to every visitor: property listings and the agents who market them. Agent names and phone numbers are business contact details, but some agents are sole traders, so parts of the data can still count as personal data. If you store the data or contact agents in the UK or EU, follow UK GDPR and PECR and have a legitimate reason. Check with a lawyer if you are unsure. ### Do I need a Rightmove account? No. The scraper needs no Rightmove account, login or cookies. ### Which Rightmove searches work? All of them: property for sale, to rent, new homes, student accommodation, and commercial property for sale or to let. Set the area, price, bedrooms, property type and any other filters on rightmove.co.uk, then copy the link from your browser. The scraper keeps every filter in the link. ### Can I search without copying a link from Rightmove? Yes. Type the places in Locations: a town, an area, a postcode, a postcode district or a station, one per line. Each one is looked up on Rightmove, which picks its best match, and searched with the filters you set: search type, radius, price, bedrooms, bathrooms, property type, commercial sector, size, tenure, must have and don't show, Sold STC, furnishing, short-term lets, move-in date and sort order. The run log shows which place each name matched, and every listing's search_url is a Rightmove link you can open to see the same search. ### How many listings can I get? Rightmove shows at most 1,008 listings for one search. For a bigger area, split it into several searches, for example by price band, property type or a smaller radius, and paste all the links. A listing found by more than one search appears once. ### What do full property details add? Turn on Fetch full property details to add the full description, the full postcode, council tax band, service charge, ground rent, years left on the lease, floor area in square feet and square meters, price per square foot, nearest stations, EPC, floorplans, brochures and full-size photos, retirement and business-for-sale flags, whether the agent is independent or a chain, and a link to sold prices for the postcode. Turn on Include past sale prices as well to add each home's earlier sales with their year, price and change, from Land Registry data as Rightmove shows it. Rentals also get the deposit, furnishing, minimum term and move-in date. It is charged per listing, only for listings whose details loaded. ### Can I track new listings and price cuts? Yes. Every listing has the date it was first listed, Rightmove's "Added today" or "Reduced on" note, and why it last changed, such as new or price reduced. To catch new listings, schedule a daily run with Listed after set to 1 day; turn on Include price reductions to get the price cuts too. ### Can I get only new or changed listings on a schedule? Yes. Turn on Only new or changed since the last run and schedule the run. The first run saves everything, marked new, to compare against. Each later run saves only listings that are new, or whose price, status, rooms, size, tenure or label changed, with a change field naming each changed field and its old and new value, such as {"price.amount": {"old": 325000, "new": 310000}}. Unchanged listings are left out and aren't charged. Sold prices compare each home's last sale, and estate agents their name, phones, address and services. Runs with the same links, locations and filters compare with each other; give a Watch name to keep comparing after you change the search. ### Can I scrape only listings added in a date range? Yes. Set Listed after to a date like 2026-10-15 or a span like 7 days, and Listed before to close the range. Dates are UK time. Only homes added within the range are kept, unless you also include price reductions, and the run stops as soon as it passes the start date, so you pay only for the listings you keep. Rightmove still serves at most 1,008 listings per search, so in a busy area a long range may need the search split by price band or area; the run log says when that happens. ### Do I get the agent's phone number? Yes. Every listing comes with the agent's name, branch, phone number and Rightmove page. To get every agent in an area, with their own phone lines and how many homes they list, set Search for to Estate agents, or use Rightmove Estate Agents Scraper on its own. ### Can I get more about each listing's agent? Yes. Turn on Add agent profiles and each listing gets its agent's full Rightmove profile in agent_profile: how many homes the branch has for sale and to let right now, its recently sold and let homes with prices, its services, separate sales and lettings phone lines, industry memberships, descriptions and map position. It's billed once per agent branch per run, so 200 listings from 20 agents cost 20 profiles. Rightmove doesn't show agents' emails or websites. ### Can I scrape sold house prices? Yes. Set Search for to Sold house prices and type the places, or paste a /house-prices/ link from rightmove.co.uk. Each home comes with its address, type, bedrooms, coordinates and every sale since 1995: price, date, tenure and whether it was a new build. Filter by years sold in, property type and tenure. Rightmove serves up to 4,000 homes per search. ### Can I scrape single properties? Yes. Paste property links, such as https://www.rightmove.co.uk/properties/172388489, into Start URLs, alone or with searches. Each gives the same row as a search would; a property page has the date it was added but not the exact time. Full property details and past sale prices work for them too. ### Does it work for overseas property? Yes, for sale: Rightmove has no overseas rentals. Set Search for to Overseas property for sale and type a country or region, such as Spain, Portugal or Costa del Sol, or paste an overseas link. Prices come in the listing's own currency, with Rightmove's conversion to pounds in price.display_gbp, and full property details add the nearest airports. ### What happens when a run fails? The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 full details) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both. ## Run it - In Apify Console: https://apify.com/keklik/rightmove-scraper - With the Apify API: POST https://api.apify.com/v2/acts/keklik~rightmove-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN with the input JSON as the body. It returns the rows. - From an AI agent: connect the Apify MCP server (https://mcp.apify.com), add the Actor `keklik/rightmove-scraper` and call it with the input. --- # Scraper: Instagram Reels Scraper > Type a brand or creator's Instagram username and get their reels, with plays, likes, comments, caption, date, length, music and tagged accounts. Instagram Reels Scraper gets the reels of any public Instagram profile, newest first and collabs included, or single reels from their links. Each reel is one row with plays, likes, comments, caption, date, length, music, location and tagged accounts. Each reel’s newest comments are an optional add-on. - Web page: https://keklik.io/scrapers/instagram-reels-scraper - Apify Actor: `keklik/instagram-reels-scraper` (https://apify.com/keklik/instagram-reels-scraper) - You enter: Usernames or reel links - You get: Plays, likes, comments, caption, date, length, music and tagged accounts - Status: working, last tested 12 Nov 2026 - Needs: an Apify account (free is enough to try). No login to the site itself. ## Price per 1,000 reels US dollars, on each Apify plan. Apify's platform costs are included. Add-ons are charged only when switched on in the input. | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Reel: Each reel the scraper saves. | $1.00 | $0.90 | $0.80 | $0.70 | | Comment (add-on): Each comment added to a reel when Comments per reel is above 0. | $1.00 | $0.90 | $0.80 | $0.70 | Apify's plans and a calculator: https://keklik.io/pricing.md ## Input The run input is a JSON object with these keys: - `urls` (array, required): 👤 Profiles or reels. One per line. A profile link or username returns that profile's reels, newest first. A reel link returns that one reel. Private profiles are skipped. - `maxReelsPerProfile` (integer, optional): 🔢 Max reels per profile. Stops each profile after this many reels. Leave it empty for all of them. Reel links are not affected. - `maxResults` (integer, optional): 🛑 Max reels in total. Stops the whole run after this many reels. Use it to cap what a run can cost. - `newerThan` (string, optional): 📅 Posted after. Posted after: a date such as 2026-01-31, or a period back from now such as 7 days or 3 months (24h, 7d and 2w work too). Leave it empty for reels of any date. - `postedBefore` (string, optional): 📅 Posted before. Pick a date, or a period back from now such as "1 year", to get only reels published before it. With Posted after, you get the reels between the two dates. Older dates take longer to reach on profiles with many reels; the reels passed over on the way are not charged. - `skipPinnedReels` (boolean, optional, default false): 📌 Skip pinned reels. Drops the reels pinned to the top of a profile. - `commentsPerPost` (integer, optional, default 0): 💬 Comments per reel ($). How many of each reel's newest comments to add. 0 adds none. Each comment is charged and makes the run slower. Example input: ```json { "urls": [ "https://www.instagram.com/nike/" ], "maxReelsPerProfile": 12, "skipPinnedReels": true, "commentsPerPost": 3, "maxResults": 12 } ``` ## Output: one row per reel 32 fields in 9 groups. ### Reel - `reel_url`: Reel URL. Link to the reel (https://www.instagram.com/reel//). - `caption`: Caption. Caption text. - `timestamp_datetime`: Posted. Publication time, ISO 8601 in UTC. - `timestamp`: Posted (Unix). Publication time, Unix seconds. - `is_pinned`: Pinned. Pinned to the top of the author's profile or reels tab. - `is_sponsored`: Paid partnership. Labelled as a paid partnership. - `paid_partners`: Paid partner. The brands a paid partnership names ("Paid partnership with ..."), by username. Empty when it isn't one, and on some paid partnerships that name no brand. - `comments_disabled`: Comments off. The author turned comments off. - `like_and_view_counts_disabled`: Counts hidden. The author hides like and view counts. ### Plays, likes and comments - `views_count`: Plays. Number of plays. Empty for a reel URL that is not among its author's 60 latest reels; scrape the profile to get it. - `likes_count`: Likes. Number of likes. Empty when the author hides like counts (like_and_view_counts_disabled is then true); the play count stays. - `comments_count`: Comments. Number of comments. ### Author - `owner_full_name`: Author name. Display name of the author. - `owner_username`: Author username. Username of the author. - `owner_id`: Author ID. Numeric Instagram user ID of the author, as a string. ### Video - `video_duration_seconds`: Length (seconds). Video length in seconds. - `media_dimensions`: Dimensions. Width x height of the video, in pixels. - `video_url`: Video URL. Video file URL. Instagram media links expire. - `display_url`: Cover image. Cover image URL. Instagram media links expire. ### Music and location - `music_info`: Music. Audio of the reel: audio_id, song_name, artist_name, uses_original_audio, should_mute_audio, should_mute_audio_reason, is_trending, is_explicit. - `location_name`: Location. Name of the tagged location. - `location_id`: Location ID. ID of the tagged location. ### Hashtags and people - `hashtags`: Hashtags. Hashtags in the caption, with the #. - `mentions`: Mentions. Usernames mentioned in the caption, without the @. - `co_authors`: Co-authors. Collab co-authors: id, username, full_name, is_verified, profile_pic_url. - `tagged_users`: Tagged accounts. Accounts tagged in the reel: id, username, full_name, is_verified, profile_pic_url. ### Instagram IDs and links - `reel_id`: Reel ID. Numeric Instagram media ID, as a string. - `shortcode`: Shortcode. The code in the reel URL. - `product_type`: Product type. Instagram's media type: "clips" for reels. ### Latest comments (add-on) - `latest_comments`: Latest comments. With Comments per post set: the reel's newest top-level comments, each with comment_id, text, created_at (Unix seconds), likes_count, is_edited, is_covered (hidden by Instagram), giphy_id, giphy_url, owner_id, owner_username, owner_is_verified, owner_profile_pic_url. Empty when the reel has no comments. ### Search details - `source_url`: Input. The input this reel came from, as you entered it. - `scraping_time`: Scraped at. When the row was scraped, ISO 8601 in UTC. ## How it works 1. Type the profiles. Add as many usernames as you like, or paste links to single reels. 2. Every reel, newest first. You get each profile's reels from the newest down, collabs with other accounts included. Private profiles are skipped. 3. Keep only the reels you want. Keep only recent reels, stop each profile at a number, or leave out the reels pinned to the top. 4. Download your list. As a spreadsheet, in Google Sheets, or into your own reports. ## Use cases - Comparing creators: Plays, likes and comments per reel side by side before you sign a creator, and a check that sponsored reels carry the paid partnership label. - Brand monitoring: What rival brands post on Reels, how often, and which sounds and formats do best. - Trend research: The audio, hashtags and lengths behind the top reels in a niche. - Campaign reporting: A campaign's reels with their play counts, exported on a schedule to a dashboard. ## Good to know A single reel link only gets its play count when the reel is among its author's 60 most recent. Older links come back with every other field, and scraping the author's profile fills the count in. Comments are top-level only, and photo posts and carousels are skipped. ## Questions ### How do I keep my first run small and cheap? Start with one or two profiles and keep 🔢 Max reels per profile at 20, or set 🛑 Max reels in total: the run stops there. Leave 💬 Comments per reel at 0 until you know you need comments. To follow a creator over time, schedule a run with 📅 Posted after set to 1 day so each run gets only the new reels. ### Is it legal to scrape Instagram reels? This scraper collects only public data that Instagram shows to visitors who are not logged in. Reels can still contain personal data, such as the usernames of tagged accounts and commenters. Personal data is protected by laws such as the GDPR in the EU, so make sure you have a lawful reason to collect and use it. If in doubt, ask a lawyer. ### Do I need an Instagram account? No. You don't need an Instagram account, a login or cookies. Your own account is never used, so it cannot be blocked. ### Can I scrape private profiles? No. Instagram shows a private profile's reels only to approved followers, so private profiles are skipped. ### Can I scrape photo posts and carousels? No. A post URL that is not a video is skipped. Use the Instagram Post Scraper for photos and carousels. ### Why is the play count empty on some reels? This happens only for reel URLs older than their author's 60 latest reels. Scrape the author's profile to get those play counts. Likes are also empty when the author hides like counts, which the Counts hidden column shows. ### How many reels can I get from a profile? Every reel on the profile's Reels tab, newest first, including the reels it made as a collab with another account. Set 🔢 Max reels per profile to stop each profile at a number, 📅 Posted after (for example 30 days) to keep only recent reels, and 🛑 Max reels in total to cap the whole run. ### Can I get comment replies? No. Instagram doesn't show replies to visitors who are not logged in, so only top-level comments are available. ### What happens when a run fails? The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 full details) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both. ## Run it - In Apify Console: https://apify.com/keklik/instagram-reels-scraper - With the Apify API: POST https://api.apify.com/v2/acts/keklik~instagram-reels-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN with the input JSON as the body. It returns the rows. - From an AI agent: connect the Apify MCP server (https://mcp.apify.com), add the Actor `keklik/instagram-reels-scraper` and call it with the input. --- # Scraper: Instagram Profile Scraper > Turn a list of Instagram usernames into each profile's followers, bio, emails and phone numbers in the bio, website and social links, post and video counts, engagement rate and 6 latest posts. Instagram Profile Scraper turns a list of usernames or profile links into one row per profile: followers, following, post and video counts, bio, bio links, email in bio, engagement rate and the 6 latest posts with their likes and comments. Also get similar profiles adds the accounts Instagram suggests as similar. It needs no Instagram account. - Web page: https://keklik.io/scrapers/instagram-profile-scraper - Apify Actor: `keklik/instagram-profile-scraper` (https://apify.com/keklik/instagram-profile-scraper) - You enter: Usernames, @handles or profile links - You get: Followers, bio, bio links, email in bio, engagement rate and latest posts - Status: working, last tested 12 Nov 2026 - Needs: an Apify account (free is enough to try). No login to the site itself. ## Price per 1,000 profiles US dollars, on each Apify plan. Apify's platform costs are included. Add-ons are charged only when switched on in the input. | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Profile: Each profile the scraper saves, including the similar profiles it finds. Profiles that fail are free. | $1.00 | $0.90 | $0.80 | $0.70 | | Post (add-on) | $1.00 | $0.90 | $0.80 | $0.70 | | Reel (add-on) | $1.00 | $0.90 | $0.80 | $0.70 | | Retried blocked profile (add-on) | $1.50 | $1.50 | $1.50 | $1.50 | Apify's plans and a calculator: https://keklik.io/pricing.md ## Input The run input is a JSON object with these keys: - `usernames` (array, required): 👤 Profiles. One per line: a profile link, @nasa or nasa. Post, reel and hashtag links are skipped. - `discoveryMode` (boolean, optional, default false): 👥 Also get similar profiles. Also scrapes the profiles Instagram suggests as similar to each profile in your list. Each one names the profile it came from, and each one is charged like any other profile. - `maxResults` (integer, optional): 🛑 Max profiles in total. Stops the run after this many profiles, yours and similar ones together. Leave it empty for no limit. Set it when Also get similar profiles is on, to cap what a run can cost. - `maxPostsPerProfile` (integer, optional): 🔢 Max posts and reels per profile. Get up to this many posts, and this many reels, for each profile. Leave it empty to get all of them. Not counted in Max profiles in total. - `postedAfter` (string, optional): 📅 Posted after. Pick a date, or a period back from now such as "7 days" or "3 months", to get only posts and reels published after it. Leave it empty for any date. Through the API, 24h, 7d and 2w work too. - `postedBefore` (string, optional): 📅 Posted before. Pick a date, or a period back from now such as "1 year", to get only posts and reels published before it. Older dates take longer to reach on big profiles; the posts passed over on the way are not charged. - `retryBlockedProfiles` (boolean, optional, default false): 🔁 Retry blocked profiles ($). Sometimes Instagram won't show a profile to us. Turn this on and we try those profiles again through a home internet connection, which Instagram almost always lets through. You pay an extra $1.50 per 1,000 for only the profiles that needed it; all other profiles cost the normal price. Leave it off and blocked profiles are skipped and free. Example input: ```json { "usernames": [ "gymshark", "glossier", "allbirds", "fentybeauty", "huel" ], "maxResults": 50 } ``` ## Output: one row per profile 52 fields in 8 groups. ### Profile - `username`: Username. Instagram username (handle), without the @, in the casing Instagram shows. - `full_name`: Full name. The name shown on the profile. - `biography`: Bio. The bio text, with its emojis and line breaks. - `profile_pic_url`: Profile picture. Link to the profile picture. Instagram image links expire after a few days, so download the picture soon if you need it. - `is_verified`: Verified. True when the profile has the blue verified badge. - `is_private`: Private. True for a private profile: its counters and bio are filled, its posts are not. ### Followers and activity - `followers_count`: Followers. Number of followers. - `follows_count`: Following. Number of accounts the profile follows. - `posts_count`: Posts. Number of posts on the profile. Empty when the profile turned off embedding (about 1 in 100). - `avg_engagement`: Engagement rate. Engagement rate: the average likes plus comments of the latest posts, divided by followers. Posts whose likes the author hides are left out; empty when every latest post hides them. 0.004538 means 0.45%. - `highlight_reel_count`: Story highlights. Number of story highlights. Empty for about 1 profile in 5, when Instagram leaves it out. - `videos_count`: Videos. Number of videos the profile has posted. Empty for private profiles and profiles that turned off embedding. - `has_public_story`: Story up now. True when the profile has a story up right now, a sign it is active today. - `has_clips`: Has reels. True when the profile has posted reels. ### Contact - `email_address`: Email. The first email address written in the bio (all of them are in emails). Found on about 1 profile in 20. - `emails`: All emails. Every email address written in the bio or in a bio link's title, in order. Empty when there is none. - `phone_numbers`: Phone numbers. Phone numbers written in the bio, as written, and the number behind a WhatsApp button or wa.me bio link (as +). A number counts when it starts with +, follows a phone word or emoji (📞, call, WhatsApp, tel) or is written like (555) 123-4567; follower counts, years and dates are left out. Found on about 1 profile in 50. - `website`: Website. The first bio link to the account's own website: not a social network, a link page like Linktree or a short link like bit.ly. Found on about half of all profiles. - `link_pages`: Link pages. Bio links to a page of more links: Linktree, Beacons, Stan Store, lnk.bio and the like, and music links such as lnk.to. Found on about 1 profile in 5. - `social_links`: Social links. Bio links to other platforms, each with network (youtube, tiktok, facebook, x, threads, linkedin, spotify, whatsapp, amazon, etsy and others) and url. Can be a profile, a video or a shop. ### Bio links and hashtags - `external_url_1`: Bio link 1. The first link in the bio: title, url, lynx_url (the same link through Instagram's redirect) and link_type. - `external_url_2`: Bio link 2. The second link in the bio, like external_url_1. - `external_url_3`: Bio link 3. The third link in the bio, like external_url_1. - `all_external_urls`: All bio links. Every link in the bio, each like external_url_1. - `bio_hashtags`: Bio hashtags. Hashtags written in the bio, without the #. - `post_hashtags`: Post hashtags. Hashtags in the captions of the latest posts, without the # and without repeats. ### Latest 6 posts - `latest_post_1`: Latest post 1. The profile's most recent latest post: id, shortcode, url, type (GraphImage for a photo, GraphVideo for a video, GraphSidecar for a carousel), is_video, caption, likes (empty when the author hides them), likes_hidden, comments, posted_at (Unix time in seconds), display_url (the image), location (a place name), media_count (slides in a carousel), dimensions, is_paid_partnership (marked "Paid partnership"), paid_partners (the brands it names) and coauthors (the post's other authors on a collab, each with username and is_verified). views, tagged_users, audio_info and product_type are always empty: Instagram doesn't show them to logged-out visitors. Empty when the profile has fewer posts, is private or turned off embedding. - `latest_post_2`: Latest post 2. The profile's 2nd latest post: id, shortcode, url, type (GraphImage for a photo, GraphVideo for a video, GraphSidecar for a carousel), is_video, caption, likes (empty when the author hides them), likes_hidden, comments, posted_at (Unix time in seconds), display_url (the image), location (a place name), media_count (slides in a carousel), dimensions, is_paid_partnership (marked "Paid partnership"), paid_partners (the brands it names) and coauthors (the post's other authors on a collab, each with username and is_verified). views, tagged_users, audio_info and product_type are always empty: Instagram doesn't show them to logged-out visitors. Empty when the profile has fewer posts, is private or turned off embedding. - `latest_post_3`: Latest post 3. The profile's 3rd latest post: id, shortcode, url, type (GraphImage for a photo, GraphVideo for a video, GraphSidecar for a carousel), is_video, caption, likes (empty when the author hides them), likes_hidden, comments, posted_at (Unix time in seconds), display_url (the image), location (a place name), media_count (slides in a carousel), dimensions, is_paid_partnership (marked "Paid partnership"), paid_partners (the brands it names) and coauthors (the post's other authors on a collab, each with username and is_verified). views, tagged_users, audio_info and product_type are always empty: Instagram doesn't show them to logged-out visitors. Empty when the profile has fewer posts, is private or turned off embedding. - `latest_post_4`: Latest post 4. The profile's 4th latest post: id, shortcode, url, type (GraphImage for a photo, GraphVideo for a video, GraphSidecar for a carousel), is_video, caption, likes (empty when the author hides them), likes_hidden, comments, posted_at (Unix time in seconds), display_url (the image), location (a place name), media_count (slides in a carousel), dimensions, is_paid_partnership (marked "Paid partnership"), paid_partners (the brands it names) and coauthors (the post's other authors on a collab, each with username and is_verified). views, tagged_users, audio_info and product_type are always empty: Instagram doesn't show them to logged-out visitors. Empty when the profile has fewer posts, is private or turned off embedding. - `latest_post_5`: Latest post 5. The profile's 5th latest post: id, shortcode, url, type (GraphImage for a photo, GraphVideo for a video, GraphSidecar for a carousel), is_video, caption, likes (empty when the author hides them), likes_hidden, comments, posted_at (Unix time in seconds), display_url (the image), location (a place name), media_count (slides in a carousel), dimensions, is_paid_partnership (marked "Paid partnership"), paid_partners (the brands it names) and coauthors (the post's other authors on a collab, each with username and is_verified). views, tagged_users, audio_info and product_type are always empty: Instagram doesn't show them to logged-out visitors. Empty when the profile has fewer posts, is private or turned off embedding. - `latest_post_6`: Latest post 6. The profile's 6th latest post: id, shortcode, url, type (GraphImage for a photo, GraphVideo for a video, GraphSidecar for a carousel), is_video, caption, likes (empty when the author hides them), likes_hidden, comments, posted_at (Unix time in seconds), display_url (the image), location (a place name), media_count (slides in a carousel), dimensions, is_paid_partnership (marked "Paid partnership"), paid_partners (the brands it names) and coauthors (the post's other authors on a collab, each with username and is_verified). views, tagged_users, audio_info and product_type are always empty: Instagram doesn't show them to logged-out visitors. Empty when the profile has fewer posts, is private or turned off embedding. ### Similar profiles - `related_profiles`: Related profiles. Profiles Instagram suggests as similar, up to about 50, each with id, username, full_name, is_verified and profile_pic_url (is_private is always empty). Big accounts usually have them; small ones often have none. - `discovered_from`: Discovered from. With Also get similar profiles (Discovery mode) on: the profile from your list this one was suggested for. Empty for the profiles you typed. - `hop_depth`: Discovery level. 0 for the profiles you typed, 1 for the similar profiles found for them. ### Instagram IDs and link - `profile_url`: Profile URL. Link to the profile on Instagram. - `profile_id`: Instagram ID. Numeric Instagram user ID. It stays the same when the username changes. - `fbid`: Facebook ID. The account's ID on Meta's Facebook side. ### Scrape details - `scraping_time`: Scraped at. When the row was scraped, in UTC (ISO 8601). - `source`: Source. How the row was read. Always "logged_out": what Instagram shows visitors who are not logged in. ## How it works 1. Paste the profiles. Usernames, @handles or profile links, one per line. 2. Each profile is read. Followers, bio, emails and phone numbers in the bio, website and social links, post and video counts, engagement rate, and the 6 latest posts with their likes, comments and paid partnerships. Private profiles come without posts. 3. Find similar profiles. Switch on Also get similar profiles to add the profiles Instagram suggests as similar, up to about 50 for each. Set Max profiles in total to keep the list small. 4. Download your list. As a spreadsheet, in Google Sheets, or into your CRM or influencer tool. ## Use cases - Vetting influencers: Followers, engagement rate, recent posts and the brands they already do paid partnerships with, for every creator on your shortlist, before you reach out. - Lead lists: Business accounts with their website and the emails and phone numbers in their bio, ready for outreach. - Competitor tracking: The same list run on a schedule, to follow follower growth and posting activity over time. - Mapping a niche: Also get similar profiles adds the accounts Instagram suggests as similar to each profile, so a few seed accounts open up a whole niche. ## Good to know Instagram shows a business account's category, contact email, phone and address only to logged-in visitors, so you get the email from the bio and the links instead: about 6 profiles in 100 have an email in their bio, and 3 in 4 have a link. Similar profiles come mostly with big accounts. Image and video links expire, so download any media soon after the run. ## Questions ### How do I keep my first run small and cheap? Paste a handful of profiles, or set 🛑 Max profiles in total (for example 20): the run stops there, similar profiles included. From November 26, when you turn on Get posts and reels, set 🔢 Max posts and reels per profile (the form suggests 50) or 📅 Posted after, so a big account's thousands of posts don't fill the run. ### How do I download everything in one file? From November 26: when Get posts and reels is on, the run saves one Excel file with a sheet each for Profiles, Posts and Reels, plus Failed profiles when some failed. Open the Output tab, pick Download everything (Excel) in the dropdown at the top, and download it. You can also download each table on its own: click Export, choose Profiles, Posts or Reels under Output, pick a format (Excel, CSV, JSON and more) and click Download. The Export window starts on Profiles, so pick Posts or Reels there when you want those. ### What does Retry blocked profiles do? From November 26: sometimes Instagram won't show a profile to us. Turn on Retry blocked profiles and we try those profiles again through a home internet connection (a residential proxy), which Instagram almost always lets through. You pay an extra $1.50 per 1,000 for only the profiles that needed it; every other profile costs the normal price. Leave it off and blocked profiles are skipped and free, and the run's last message tells you how many there were. ### How far back can I get posts? From November 26, with Get posts and reels: as far back as the profile goes. Posts come newest first, so to reach old dates the scraper has to page past all the newer posts, about 12 a second. For a profile with a few hundred posts that takes seconds; for a profile with tens of thousands, reaching posts from years ago can take a while. Posts passed over on the way are not charged. ### Is it legal to scrape Instagram profiles? This scraper collects only data that Instagram shows publicly to visitors who are not logged in. Profiles can still contain personal data, which laws such as the GDPR and CCPA protect. Make sure you have a lawful reason to collect and use it, and don't scrape private information. If you are unsure, ask a lawyer. ### Do I need an Instagram account? No. You don't need an Instagram account, a login or cookies, and the scraper never uses yours. ### Can I scrape private Instagram profiles? Private profiles are returned with their counters, bio and badges, but without posts or reels, because Instagram does not show those to visitors. ### Can I get a business account's email and phone number? Instagram shows a business account's contact email, phone number, category and address only to logged-in users, so those fields come back empty. What you can get instead: - Emails and phone numbers in the bio (emails, phone_numbers): what the account wrote in its bio, including the number behind a WhatsApp link. Emails are on about 6 profiles in 100, phone numbers on about 2 in 100. - Website (website): about half of all profiles link to their own site, where contact details usually are. Feed those websites to a contact details scraper to collect more emails and phone numbers. ### Can I find more profiles like the ones I have? Yes. Turn on 👥 Also get similar profiles and the scraper also collects the profiles Instagram suggests as similar to each profile in your list, up to about 50 each. Each one it finds is a result you pay for, so set 🛑 Max profiles in total to keep the run small. Small profiles often have no suggestions, so fewer are found around them. ### Why are some fields empty? Every row has what Instagram shows visitors who are not logged in (its source field says logged_out). See Always-empty fields under What to know about the data. Private profiles have no posts, and profiles that turned off embedding (about 1 in 100) have no latest posts or post count. ### What happens when a run fails? The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 posts) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry, request and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both. ## Run it - In Apify Console: https://apify.com/keklik/instagram-profile-scraper - With the Apify API: POST https://api.apify.com/v2/acts/keklik~instagram-profile-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN with the input JSON as the body. It returns the rows. - From an AI agent: connect the Apify MCP server (https://mcp.apify.com), add the Actor `keklik/instagram-profile-scraper` and call it with the input. --- # Scraper: Instagram Post Scraper > Get the posts of any public Instagram profile, with caption, likes, comment count, date, photos, videos, tags and music. Instagram Post Scraper gets the posts of any public Instagram profile, newest first, or single posts from their links. Each post is one row with caption, likes, comment count, date, photos, videos, carousel slides, tags, mentions and music. The newest comments of each post are an optional add-on, charged per comment. - Web page: https://keklik.io/scrapers/instagram-post-scraper - Apify Actor: `keklik/instagram-post-scraper` (https://apify.com/keklik/instagram-post-scraper) - You enter: Usernames, profile links or post links - You get: Caption, likes, comment count, date, photos, videos, tags and music - Status: working, last tested 12 Nov 2026 - Needs: an Apify account (free is enough to try). No login to the site itself. ## Price per 1,000 posts US dollars, on each Apify plan. Apify's platform costs are included. Add-ons are charged only when switched on in the input. | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Post: Each post the scraper saves. | $1.00 | $0.90 | $0.80 | $0.70 | | Comment (add-on): Each comment added to a post when Comments per post is above 0. | $1.00 | $0.90 | $0.80 | $0.70 | Apify's plans and a calculator: https://keklik.io/pricing.md ## Input The run input is a JSON object with these keys: - `urls` (array, required): 👤 Profiles or posts. One per line. A profile link or username returns that profile's posts, newest first. A post or reel link returns that one post. - `maxPostsPerProfile` (integer, optional): 🔢 Max posts per profile. Stops each profile after this many posts. Leave it empty for all of them. Single post links are not affected. - `maxResults` (integer, optional): 🛑 Max posts in total. Stops the whole run after this many posts. Leave it empty for no limit. - `newerThan` (string, optional): 📅 Posted after. Posted after: a date such as 2026-01-31, or a period back from now such as 7 days or 3 months (24h, 7d and 2w work too). Each profile stops at its first older post. - `postedBefore` (string, optional): 📅 Posted before. Pick a date, or a period back from now such as "1 year", to get only posts published before it. With Posted after, you get the posts between the two dates. Older dates take longer to reach on profiles with many posts; the posts passed over on the way are not charged. - `skipPinnedPosts` (boolean, optional, default false): 📌 Skip pinned posts. Drops the posts pinned to the top of a profile. - `commentsPerPost` (integer, optional, default 0): 💬 Comments per post ($). How many of each post's newest comments to add. 0 adds none. Each comment is charged and makes the run slower. Example input: ```json { "urls": [ "starbucks" ], "maxPostsPerProfile": 10, "skipPinnedPosts": true, "commentsPerPost": 3 } ``` ## Output: one row per post 48 fields in 9 groups. ### Post - `url`: Post URL. Link to the post (https://www.instagram.com/p//). - `timestamp_datetime`: Posted. Publication time, ISO 8601 in UTC. - `media_type`: Media type. "image", "video" or "carousel". - `caption`: Caption. Caption text. - `alt`: Alt text. Alt text of the image, when Instagram or the author set one. - `product_type`: Product type. Instagram product type: "feed" (photo), "carousel_container" or "clips" (reel). - `is_video`: Is video. True for videos and reels. - `is_pinned`: Pinned. Pinned to the top of the scraped profile. Always false for single post URLs. - `is_paid_partnership`: Paid partnership. Labelled as a paid partnership. - `paid_partners`: Paid partner. The brands a paid partnership names ("Paid partnership with ..."), by username. Empty when it isn't one, and on some paid partnerships that name no brand. - `dimensions`: Dimensions. Width x height of the main media, in pixels. - `timestamp`: Posted (Unix). Publication time, Unix seconds. - `post_id`: Post ID. Numeric Instagram media ID, as a string. - `shortcode`: Shortcode. The code in the post URL. ### Author - `owner_username`: Author username. Username of the author. - `owner_full_name`: Author name. Display name of the author. - `owner_id`: Author ID. Numeric Instagram user ID of the author, as a string. - `owner_profile_pic_url`: Author profile picture. Profile picture URL of the author. Instagram image links expire. ### Likes and comments - `likes_count`: Likes. Number of likes. Empty when the author hides like counts (like_and_view_counts_disabled is then true). - `comments_count`: Comments. Number of comments Instagram shows on the post. - `like_and_view_counts_disabled`: Likes hidden. True when the author hides this post's like and view counts. likes_count is then empty, because Instagram shows visitors no real number. ### Photos and videos - `carousel_media_count`: Carousel slides. Number of slides, for carousels. - `display_url`: Image URL. Main image or video cover URL. Instagram media links expire. - `video_url`: Video URL. Video file URL, for videos and reels. Instagram media links expire. - `reel_url`: Reel URL. Link to the reel (https://www.instagram.com/reel//), for videos only. - `image_1`: Slide 1 image. Image URL of carousel slide 1. - `image_2`: Slide 2 image. Image URL of carousel slide 2. - `image_3`: Slide 3 image. Image URL of carousel slide 3. - `image_4`: Slide 4 image. Image URL of carousel slide 4. - `image_5`: Slide 5 image. Image URL of carousel slide 5. ### Carousel slides - `child_post_1`: Carousel slide 1. Carousel slide 1: id, alt, width, height, display_url, timestamp, media_type, video_url. - `child_post_2`: Carousel slide 2. Carousel slide 2: id, alt, width, height, display_url, timestamp, media_type, video_url. - `child_post_3`: Carousel slide 3. Carousel slide 3: id, alt, width, height, display_url, timestamp, media_type, video_url. - `child_post_4`: Carousel slide 4. Carousel slide 4: id, alt, width, height, display_url, timestamp, media_type, video_url. - `child_post_5`: Carousel slide 5. Carousel slide 5: id, alt, width, height, display_url, timestamp, media_type, video_url. - `child_post_6`: Carousel slide 6. Carousel slide 6: id, alt, width, height, display_url, timestamp, media_type, video_url. - `child_post_7`: Carousel slide 7. Carousel slide 7: id, alt, width, height, display_url, timestamp, media_type, video_url. - `child_post_8`: Carousel slide 8. Carousel slide 8: id, alt, width, height, display_url, timestamp, media_type, video_url. - `child_post_9`: Carousel slide 9. Carousel slide 9: id, alt, width, height, display_url, timestamp, media_type, video_url. - `child_post_10`: Carousel slide 10. Carousel slide 10: id, alt, width, height, display_url, timestamp, media_type, video_url. ### Tags, mentions and hashtags - `hashtags`: Hashtags. Hashtags in the caption, with the #. - `mentions`: Mentions. Usernames mentioned in the caption, without the @. - `coauthors`: Co-authors. Collab co-authors: id, username, full_name, is_verified, profile_pic_url. - `user_tags`: Tagged accounts. Accounts tagged in the media: id, username, full_name, is_verified, profile_pic_url. ### Music - `music`: Music. Audio of a reel or video: audio_id, song_name, artist_name, uses_original_audio, should_mute_audio, should_mute_audio_reason, is_trending_in_clips, is_explicit. ### Latest comments (add-on) - `latest_comments`: Latest comments. Only with Comments per post set, for posts that have comments: the post's newest comments, newest first, each with comment_id, text, created_at (Unix seconds), likes_count, is_edited, is_covered (hidden by Instagram), giphy_id, giphy_url, owner_id, owner_username, owner_is_verified, owner_profile_pic_url. ### Scrape details - `source_url`: Source input. The input this post came from, as you entered it. - `scraping_time`: Scraped at. When the row was scraped, ISO 8601 in UTC. ## How it works 1. Type the profiles. A username or profile link gets its posts, newest first. A post link gets that one post. 2. Keep only the posts you want. Set a start date, how many posts to take from each profile, or leave out pinned posts. 3. Add comments if you need them. Choose how many of each post's newest comments to add. You pay per comment, and none are added unless you ask. 4. Download your list. As a spreadsheet, in Google Sheets, or into your reporting tool. ## Use cases - Competitor tracking: What rival accounts post, how often and in which format, and which posts draw the most likes and comments. - Vetting influencers: Engagement on each post, paid partnership labels, collab posts and the brands an influencer tags. - Content planning: The captions, hashtags, formats and music behind the best posts in your niche. - Research datasets: Every post from a set of accounts over a chosen period, for trend or sentiment analysis. ## Good to know Instagram hides view and play counts from visitors who aren't logged in, so posts come without them. Comments are top-level only, and a carousel row keeps its first 10 slides. Image and video links expire, so download any media you need soon after the run. ## Questions ### How do I keep my first run small and cheap? Start with one or two profiles and keep 🔢 Max posts per profile at 20, or set 🛑 Max posts in total: the run stops there. Leave 💬 Comments per post at 0 until you know you need comments. To follow a profile over time, schedule a run with 📅 Posted after set to 1 day so each run gets only the new posts. ### Is it legal to scrape Instagram? This scraper collects only data that Instagram shows publicly to visitors who are not logged in. Posts can still contain personal data, such as usernames of tagged accounts or commenters. Personal data is protected by laws such as the GDPR in Europe, so make sure you have a lawful reason to collect and use it, and check with a lawyer if you are unsure. ### Do I need an Instagram account? No. You don't need an Instagram account, a login or cookies. ### Can I scrape private Instagram profiles? No. Instagram shows a private profile's posts only to approved followers, so private profiles are skipped. ### Can I get view or play counts? Not on posts: Instagram does not show view counts to logged-out visitors. For reels, Instagram Reels Scraper gives the play count of each reel. ### How do comments work? Set Comments per post to add each post's newest comments to its row. Comments come newest first and are top-level comments only: replies and the "most relevant" order are not available without logging in. A post with no comments has no latest_comments. If Instagram refuses a post's comments, the post is still saved without them, and the run's status message says how many posts missed their comments. You pay only for the comments you get. For many comments per post, or one row per comment, use the Instagram Comments Scraper. ### Why do some media links stop working? Instagram image and video links expire after a while. Download the media soon after the run if you need to keep it. ### What happens when a run fails? The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 full details) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both. ## Run it - In Apify Console: https://apify.com/keklik/instagram-post-scraper - With the Apify API: POST https://api.apify.com/v2/acts/keklik~instagram-post-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN with the input JSON as the body. It returns the rows. - From an AI agent: connect the Apify MCP server (https://mcp.apify.com), add the Actor `keklik/instagram-post-scraper` and call it with the input. --- # Scraper: Google Maps Leads Scraper > Get every business on Google Maps for any search in any US city, with phone, website, rating and opening hours, plus emails from their own websites. Google Maps Leads Scraper finds every business that matches a search, such as “plumber” in “Brooklyn, NY”, and returns one row per business with its name, category, phone, website, address, rating and opening hours. It searches the area piece by piece, so you get more than the 200 places one Google Maps search shows. Emails and social profiles from each business’s own website are an optional add-on. - Web page: https://keklik.io/scrapers/google-maps-leads-scraper - Apify Actor: `keklik/google-maps-leads-scraper` (https://apify.com/keklik/google-maps-leads-scraper) - You enter: What to search for, and one or more cities, postcodes or regions - You get: Name, category, phone, website, address, rating, reviews, opening hours and coordinates - Status: working, last tested 11 Nov 2026 - Needs: an Apify account (free is enough to try). No login to the site itself. ## Price per 1,000 businesses US dollars, on each Apify plan. Apify's platform costs are included. Add-ons are charged only when switched on in the input. | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Place: Each place the scraper saves. Places removed by filters are free. | $3.00 | $2.25 | $1.50 | $1.10 | | Place details (add-on): Reviews by star, review keywords and plus code | $1.50 | $1.50 | $1.10 | $0.80 | | Emails and social profiles (add-on): Charged only when a website gave something | $1.50 | $1.50 | $1.10 | $0.80 | | Review (add-on): Each review added to a place with Reviews per place. | $0.40 | $0.35 | $0.28 | $0.20 | | Images (add-on): Up to 200 photo links per business | $1.50 | $1.00 | $0.75 | $0.55 | Apify's plans and a calculator: https://keklik.io/pricing.md ## Input The run input is a JSON object with these keys: - `searchTerms` (array, optional): 🔍 Search terms. What to search for, one per line, as you would type it on Google Maps: dentist, italian restaurant, plumber. - `locations` (array, optional): 📍 Locations. Where to search, one per line: Marseille, France or 75011 Paris. Leave it empty to search the terms as typed, which gives at most about 200 places per term. - `maxPlacesPerSearch` (integer, optional): 💯 Max places per search. Stops each term and location pair after this many places. Leave it empty to cover the whole area. - `maxResults` (integer, optional): 🛑 Max places in total. Stops the whole run after this many places. Use it to cap what a run can cost. - `contactDetails` (boolean, optional, default false): 📧 Emails and social profiles ($). Visits each business's website for emails, phone numbers and social profiles. Charged only for places where the website gave something. - `language` (string, optional, default "en"): 🌍 Language. The language of categories, opening hours, attributes and reviews, such as en, fr or de. - `categories` (array, optional): 🏷️ Categories. Pick Google Maps categories to keep only places listed under one of them: Orthodontist and Pediatric dentist keep the specialists out of a dentist search. With no search term, each category is searched by its name. - `websiteFilter` (string, optional, default "any", one of "any", "with", "without"): 🌐 Website. Keep only places with a website, or only places without one (often prospects for web agencies). - `phoneFilter` (string, optional, default "any", one of "any", "with", "without"): 📞 Phone. Keep only places with a phone number, or only places without one. - `minRating` (string, optional, default "", one of "", "2.0", "2.5", "3.0", "3.5", "4.0", "4.5"): ⭐ Min rating. Keep only places rated at least this many stars. - `maxRating` (string, optional, default "", one of "", "1.0", "1.5", "2.0", "2.5", "3.0", "3.5", "4.0", "4.5"): ⭐ Max rating. Keep only places rated at most this many stars, to find businesses with unhappy customers. Places with no rating yet are kept. - `minReviews` (integer, optional): Min reviews. Keep only places with at least this many reviews. - `maxReviews` (integer, optional): Max reviews. Keep only places with at most this many reviews, to find new or small businesses. - `claimedFilter` (string, optional, default "any", one of "any", "claimed", "unclaimed"): Claimed by owner. Keep only places whose owner manages the Google listing, or only places nobody has claimed yet (often prospects for local marketing). - `nameFilter` (string, optional, default "any", one of "any", "contains", "exact"): Name filter. Keep only places whose name contains the search term ("Starbucks" finds "Starbucks Coffee"), or matches it exactly. Useful for brands and chains. - `skipClosed` (boolean, optional, default false): Skip closed places. Leave out places marked temporarily or permanently closed. - `skipWithoutEmail` (boolean, optional, default false): Skip places without an email. Leave out places whose website gave no email. They are not charged. - `emailVerifier` (string, optional, default "", one of "", "reoon", "zerobounce", "neverbounce", "millionverifier", "debounce", "truelist", "bouncer", "bounceban"): Email verifier (your own account). Pick your email verification service to check each mailbox. Bouncer and BounceBan also try to answer for catch-all domains (domains that accept every address); the others mark those emails catch_all. - `emailVerifierApiKey` (string, optional): Email verifier API key. Paste your API key from that service. It is stored encrypted, and checked before the run starts. - `verifyEmails` (string, optional, default "all", one of "all", "first"): Emails to verify. Check every email found, or only each place's first one to save credits. - `dropInvalidEmails` (boolean, optional, default true): Leave out invalid emails. Leave out the emails your verifier marks invalid. Turn off to keep them, marked invalid. - `legalNoticePeople` (boolean, optional, default true): Names in company details. Turn off to leave out the owners' and managing directors' names, for example for GDPR. The company's legal name, registration and VAT numbers stay. - `reviewsPerPlace` (integer, optional, default 0): Reviews per place ($). Adds up to this many reviews to each place. For every review of a place, use the Google Maps reviews scraper. - `reviewsSort` (string, optional, default "newest", one of "newest", "most_relevant", "highest_rating", "lowest_rating"): Reviews order. Pick which reviews come first: newest, most relevant, highest or lowest rated. Highest and lowest rated sort each place's latest 600 reviews by stars (all of them when it has fewer), newest first within a star. - `reviewsNewerThan` (string, optional): Reviews newer than. Pick a date, or a period such as "6 months", to get only recent reviews. - `reviewKeywords` (array, optional): Reviews mentioning. Add words to get only reviews that mention one of them, such as "parking", "delivery" or "rude". Whole words, in the language each review was written in; a phrase such as "front desk" is matched as a phrase. Capitals don't matter, and a word typed with its accents ("délicieux") is also found without them. - `reviewsThoroughSearch` (boolean, optional, default false): Thorough search. Also find your words inside longer words ("park" finds "parking") and in Google's translations of reviews written in other languages. Looks through each place's newest 600 reviews. Turn it on for hotels and tourist spots, where many reviews are in other languages. - `reviewerDetails` (boolean, optional, default true): Reviewer names and profiles. Turn off to leave out who wrote each review (name, profile link, photo), for example for GDPR. Ratings, text and dates stay. - `placeDetails` (boolean, optional, default false): Place details ($). Adds reviews per star, review keywords, delivery and takeout hours and the plus code. Charged per place. - `imagesPerPlace` (integer, optional, default 0): Photos per place ($). Set how many photos to add to each place, up to 200. Videos found among them come along on top and are charged like photos. 0 adds none. - `imageAuthors` (boolean, optional, default false): Photo authors. Turn on to add who posted each photo (name, profile link and picture), when it was uploaded and taken, its size and the app it came from. No extra cost, but slower. Authors' names are personal data, so leave this off unless you need them, for example under GDPR. Needs Photos per place above 0. - `placesInside` (boolean, optional, default false): Businesses inside each place. Turn on to add every business listed in a mall's or airport's Google Maps directory, one row each, with the section it is listed under (Clothing, Food & Drink...). Your filters apply to them too: Shoe store in Categories gives the shoe shops inside the malls. - `maxPlacesInside` (integer, optional): Max businesses per place. Set a limit for each mall or airport: a big mall lists over 200 businesses. Leave empty for all. - `allPlaces` (boolean, optional, default false): Every place in the locations. Turn on to get every business in each location, such as shops, restaurants, offices and clinics, with no search term needed. Big cities have tens of thousands of places: start with a district or postal code, or set Max places per search. - `radiusCenter` (string, optional): Near. Type an address or coordinates to search around, such as "500 Congress Ave, Austin, TX" or "30.2672, -97.7431". Only places within Radius of it are kept. - `radiusKm` (number, optional, default 5): Radius. Set how far around Near to search. 1 mile is 1.6 km. - `country` (string, optional, one of "AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "VG", "BN", "BG", "BF", "BI", "CV", "KH", "CM", "CA", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CK", "CR", "HR", "CU", "CW", "CY", "CZ", "CD", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "SZ", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "CI", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "AN", "NC", "NZ", "NI", "NE", "NG", "NU", "YU", "NF", "KP", "MK", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "CG", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "CS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "KR", "SS", "ES", "LK", "SD", "SR", "SJ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "NL", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "VI", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VA", "VE", "VN", "WF", "EH", "YE", "ZM", "ZW"): Country. Pick the country, for a place name that exists in many countries or states (Paris, Texas; Springfield). - `state` (string, optional): State or region. Type the state, province or region: Texas, Ontario, Bavaria. - `county` (string, optional): County. Type the county: Travis County, Kings County. - `city` (string, optional): City. Type the city, town or district: Austin, Brooklyn, Marseille. - `postalCode` (string, optional): Postal code. Type the postal or ZIP code: 78701, 75011. - `urls` (array, optional): Google Maps links. Optional. A Google Maps search link is searched over the map area it shows. A place link or Place ID gives that one place. - `placeIds` (array, optional): Place IDs. Paste Google place IDs (they start with ChIJ), one per line, such as an earlier run's place_id column. - `geoMatch` (boolean, optional, default true): Only places inside the location. Leave on to keep only places inside the location you typed: a Brooklyn search leaves out Queens next door. Turn off to also keep places around the edges. - `skipUnrelated` (boolean, optional, default true): Only places of the searched type. Leaves out the places Google adds when an area runs out of real matches, such as osteopaths in a dentist search. - `customArea` (object, optional): Custom area (GeoJSON). Paste a GeoJSON area (draw one at geojson.io) to search only inside it, such as a sales territory. Each shape is searched as its own area. - `nameMatch` (boolean, optional, default false): Search term in the name. Replaced by "Name filter"; true still keeps only places whose name contains the search term. Example input: ```json { "searchTerms": [ "plumber" ], "locations": [ "Brooklyn, NY" ], "placeDetails": true, "contactDetails": true, "reviewsPerPlace": 2, "imagesPerPlace": 5, "maxResults": 30, "language": "en", "websiteFilter": "any", "phoneFilter": "any", "claimedFilter": "any", "geoMatch": true, "skipUnrelated": true, "reviewsSort": "newest" } ``` ## Output: one row per business 115 fields in 14 groups. ### Business - `name`: Name. Business name. - `local_name`: Local name. The business name in the place's own language and script, when Google shows a different name in the run's language (name). Mostly outside English-speaking countries: "一蘭 渋谷店" for ICHIRAN Shibuya in Tokyo, "IONITY-Ladestation" in Germany. Empty when the names are the same. - `category`: Category. Main Google Maps category. - `categories`: Categories. All Google Maps categories of the place. - `description`: Description. The owner's description, or Google's summary of the place. - `owner_name`: Owner name. Name of the account that manages the profile. - `owner_id`: Owner ID. Google ID of the account that manages the listing. - `owner_url`: Owner profile. Google Maps profile of the account that manages the listing, with its posts and photos. - `is_claimed`: Claimed. True when the owner has claimed the Google Business Profile. - `is_temporarily_closed`: Temporarily closed. True when Google marks the place temporarily closed. - `is_permanently_closed`: Permanently closed. True when Google marks the place permanently closed. ### Contact - `phone`: Phone. Phone number as Google shows it. - `phone_unformatted`: Phone (international). Phone number in international format, such as +33491524482. - `website`: Website. The business's website. - `order_links`: Order links. Order-online links, each with its label. - `reservation_link`: Reservation link. Link to book a table or appointment. - `booking_links`: Booking links. Every booking button on the listing, one link per provider: tables (Reserve a table), appointments (Book online) and waitlists. ### Address and location - `address`: Address. Full address. - `local_address`: Local address. The address in the place's own language and script, when it differs from address. Mostly in countries with another script (Japan, the Arab world). Empty when they are the same. - `street`: Street. Street address. - `city`: City. City. - `postal_code`: Postal code. Postal or ZIP code. - `county`: County. The county the place is in, such as "Travis County" (where Google lists one). - `state`: State or region. State, region or province, when Google gives one. - `state_code`: State code. Two-letter state code, for places in the United States ("TX"). - `country_code`: Country. Two-letter country code. - `country_name`: Country. Country name in English ("United States"). - `neighborhood`: Neighborhood. Neighborhood, when Google gives one. - `is_service_area`: Service-area business. True for a business that serves customers at their address and shows no street address on Google Maps, such as many plumbers and cleaners. - `located_in`: Located in. The mall, airport, hotel or building the place is inside, as Google names it: Barton Creek Square. - `located_in_url`: Located in URL. The Google Maps link of the place it is inside. - `lat`: Latitude. Latitude. - `lng`: Longitude. Longitude. - `timezone`: Time zone. Time zone of the place, such as Europe/Paris. ### Ratings - `rating`: Rating. Average star rating, 1 to 5. - `reviews_count`: Reviews. Number of reviews. - `reviews_url`: Reviews URL. Link to the place's reviews. ### Hours and photos - `opening_hours`: Opening hours. Opening hours per day, Monday first: [{"day": "Monday", "hours": "9 AM-6 PM"}]. - `hours_notices`: Hours notices. Google's notes on the coming week's hours, such as a holiday that might change them: one entry per day with a note. Empty when Google shows none. - `open_now`: Open now. Whether the place was open when it was scraped (see scraping_time). Empty when Google shows no hours. - `open_status`: Open status. Google's line for it at scraping time, with when it opens or closes next: "Closed · Opens 8 AM", "Open · Closes 11 PM", "Open 24 hours". - `about`: About. The About tab: {"Accessibility": {"Wheelchair accessible entrance": true}, "Payments": {...}}. - `logo_url`: Logo URL. The business's profile picture on Google (its logo when the owner set one), full size. - `main_image_url`: Main image. The place's main photo. - `images_count`: Photos. Number of photos on the place. ### Google IDs and links - `place_id`: Place ID. Google Place ID (ChIJ...). Use it with Google Maps Reviews Scraper or the Google Places API. - `cid`: CID. Google Maps customer ID (cid). - `kgmid`: Knowledge Graph ID. Google Knowledge Graph ID, such as /g/11cjg9nkyv. - `url`: Google Maps URL. Link to the place on Google Maps. ### Hotels and gas stations - `category`: Category. Main Google Maps category. - `hotel` - `fuel_prices`: Fuel prices. Gas stations only: the fuel price Google shows on the map, [{"grade": "Regular", "price": "$3.80"}]. ### Emails and social profiles (add-on) - `emails`: Emails. Emails and social profiles: email addresses found on the website, the site's own domain first. - `email_details`: Email details. Emails and social profiles: one object per email, in the same order as emails. status is likely_deliverable (found on the business's own website, and its domain has a working mail server), unchecked (the mail server lookup didn't answer) or risky (a domain typo was fixed); with your own email verifier it becomes valid, invalid, catch_all or unknown, with verified_by, verified_at, verifier_result (the service's own answer) and is_catch_all. Also is_own_domain, is_role, is_free_mail, mail_provider (Google Workspace / Gmail, Microsoft 365, Zoho...), found_on (the page it was found on), found_as (mailto link, text, or cloudflare-hidden) and corrected_from when a typo was fixed. No-reply, disposable and dead-domain addresses are left out. - `website_phones`: Website phones. Emails and social profiles: phone numbers linked on the website. - `whatsapp`: WhatsApp. Emails and social profiles: the business's WhatsApp chat link found on its website, as https://wa.me/. - `facebook`: Facebook. Facebook page. - `instagram`: Instagram. Instagram profile. - `linkedin`: LinkedIn. LinkedIn page. - `twitter`: X (Twitter). X (Twitter) profile. - `tiktok`: TikTok. TikTok profile. - `youtube`: YouTube. YouTube channel. - `pinterest`: Pinterest. Pinterest profile. - `discord`: Discord. An invite to the business's Discord server, linked from its website. - `yelp`: Yelp. The business's Yelp page, linked from its website. - `tripadvisor`: Tripadvisor. The business's Tripadvisor page, linked from its website. - `foursquare`: Foursquare. The business's Foursquare page, linked from its website. ### Company details (add-on) - `legal_notice.legal_name`. The business's legal name, with its legal form. - `legal_notice.legal_form`. The legal form: GmbH, UG (haftungsbeschränkt), AG, SARL, SAS, Ltd, LLP, S.L., S.r.l., B.V., SRL, Einzelunternehmen... - `legal_notice.registration_numbers`. Company registration numbers: HRB, HRA, PR, GnR or VR (Germany), FN (Austria), UID (Switzerland), SIREN and SIRET (France), Company number (UK), Partita IVA and REA (Italy), CIF and, for a sole trader, NIF (Spain), KvK (Netherlands), Enterprise number (Belgium). - `legal_notice.vat_ids`. VAT IDs with their country prefix and without spaces (DE136695976, ATU13585627, CHE116281710, FR40303265045, GB980780684), each checked against its country's format and check digits. - `legal_notice.share_capital` - `legal_notice.people`. People named with a role: owners, managing directors, directors, board members, legal representatives, the person responsible for the content. Academic titles (Dr., Prof.) are kept, Mr, Herr and Mme are dropped. Empty when "Names in company details" is off. - `legal_notice.page_url`. The page the company details come from. - `website`: Website. The business's website. ### Extra place details (add-on) - `reviews_distribution` - `review_tags`: Review keywords. Place details: keywords Google picks out of the reviews, with how many reviews mention each. - `price_level`: Price level. Place details: Google's price level ($ to $$$$) when the listing shows one. Google shows it to logged-out visitors for few places (some hotels and gas stations, not restaurants). - `price_per_person` - `other_hours`: Other hours. Place details: delivery, takeout, kitchen and other hours, per service. - `plus_code`: Plus code. Place details: the place's plus code. - `street_view_url`: Street View. Place details: link that opens Google Street View in front of the place. - `order_providers`: Order providers. Place details: the delivery and takeout services listed behind "Order online", [{"name": "DoorDash", "url": "..."}]. - `owner_posts`: Owner posts. Place details: the latest updates, events and offers the owner posted on Google (up to 10), newest first, with type, title, text, dates, button link, coupon code and image. ### Latest reviews (add-on) - `latest_reviews`: Reviews. Reviews per place: the place's reviews, with rating, text, date, owner response and reviewer. ### Photos (add-on) - `images_count`: Photos. Number of photos on the place. - `image_categories` - `images`: Images. Business images: full-size links to the place's photos (360 photos included, videos not), up to "Photos per place", in the order Google's photo gallery shows them. The same photos with their details are in image_details. - `image_details`: Image details. Business images: every photo and video collected, in gallery order, with its full-size link, type, source, Google's category labels and, with Photo authors on, who posted it and when. ### Search details - `search_term`: Search term. The search term the place was found with. - `search_location`: Search location. The location the place was found in. - `in_location`: In the location. Whether Google lists the place as being in the location you typed. Always true with "Only places inside the location" on; with it off, false marks the places it would have left out. Empty when the location can't be checked (a search URL, a street address, a place URL). - `matches_search`: Matches the search. Whether the place is of the searched type (its categories or name match the search). Always true with "Only places of the searched type" on; with it off, false marks the places Google added around the real matches. Empty for place URLs. - `rank`: Rank. Order in which the place was found for its search. - `source_url`: Input. The input this place came from. - `scraping_time`: Scraped at. When the row was scraped, ISO 8601 in UTC. ### Places inside (add-on) - `category`: Category. Main Google Maps category. - `located_in`: Located in. The mall, airport, hotel or building the place is inside, as Google names it: Barton Creek Square. - `directory_section`: Directory section. Add-on: Businesses inside each place. For a business found in a mall's or an airport's directory, the section it is listed under (Clothing, Food & Drink...). - `places_inside_count`: Places inside. Add-on: Businesses inside each place. How many businesses this place's directory lists (0 for a place without one). - `address`: Address. Full address. - `phone`: Phone. Phone number as Google shows it. - `website`: Website. The business's website. - `rating`: Rating. Average star rating, 1 to 5. - `reviews_count`: Reviews. Number of reviews. - `url`: Google Maps URL. Link to the place on Google Maps. ## How it works 1. Type what and where. Add more keywords or cities and each one is searched. 2. Every neighborhood is searched. Google Maps only shows 200 results per search. The scraper goes through the area piece by piece, so you get every business, not just the first 200. 3. Keep only the leads you want. Businesses you filter out are free. 4. Download your list. As a spreadsheet, in Google Sheets, or into HubSpot, Salesforce or Pipedrive. ## Use cases - Sales prospecting: Local businesses of one type across your cities, with phone numbers, websites and emails for outreach. - Finding clients for an agency: Businesses without a website, with a low rating or with an unclaimed profile, which are the ones most likely to need help. - Market sizing: Every business of a type in a city with its rating and review count, to size a market or spot the gaps. - Local SEO: Categories, claimed status and review counts for the businesses that rank in your area. ## Good to know The search area is a rectangle around the location, so towns at its edges can appear too: narrow the list with the city or postcode column. Emails come from the businesses' own websites, so expect them for part of the places. They are checked for junk but not verified with a mail server. ## Questions ### Is it legal to scrape Google Maps? The scraper collects only public business information that Google Maps shows to visitors who are not logged in. Some of it can still be personal data, such as a sole trader's name, phone number or email, the owners and managing directors named in company details, reviewers' names, or the names of the people who posted photos (with Photo authors on). Personal data is protected by laws such as the GDPR in the EU, so make sure you have a lawful reason to collect and use it, especially for cold outreach. If in doubt, ask a lawyer. ### Do I need a Google account or a Google Maps API key? No. You don't need a Google account, a login, cookies or a Places API key, and there is nothing to set up. ### How many places can I get? As many as Google Maps has for your search in the area. A single Google Maps search stops at 200 places, but the scraper searches a large area piece by piece, so a city-wide search goes well beyond that. For a whole country, list its cities or regions as locations. ### How do I keep my first run small and cheap? Set 🛑 Max places in total (for example 50): the run stops there, whatever else you set. 💯 Max places per search limits each search term in each location. Filters are free and places they leave out are not charged, so filtering early (with a website, at least 4 stars, a category) also lowers the cost. Paid options are marked ($) in the form: emails and social profiles, reviews, place details and photos. Emails are charged only for places whose website gave something. ### Can I search several keywords or cities at once? Yes. Each search term is searched in each location, and a place that several searches find appears once. ### Can I get every business in an area, not just one type? Yes. Tick Every place in the locations and type the locations; search terms can stay empty. You get every business in the area, each once: shops, offices, clinics, restaurants, schools, parks and the rest. A whole city holds tens of thousands of places: start with a district or postal code, or set Max places per search. ### Can I search around an address, or in an area I draw? Yes. Type an address or coordinates in Near and a distance in Radius to get every matching place within that circle, such as all dentists within 3 km of your office. For any other shape, a sales territory, a delivery zone or a district Google has no name for, draw it at geojson.io, copy the GeoJSON and paste it into Custom area: ``json { "searchTerms": ["plumber"], "customArea": {"type": "Polygon", "coordinates": [[[-97.76, 30.25], [-97.72, 30.25], [-97.72, 30.29], [-97.76, 30.29], [-97.76, 30.25]]]} } ` Each polygon of a MultiPolygon or FeatureCollection is searched as its own area. You get only the places inside the shape and pay only for those, unless you turn off Only places inside the location: they are then kept with in_location` set to false. Areas work with search terms, categories and Every place in the locations. ### Can I pick exact Google Maps categories? Yes. Pick them in Categories, from Google's own list of about 4,000. A search for dentist with Orthodontist and Pediatric dentist picked keeps only those specialists. Pick categories with no search term and each one is searched by its name, or turn on Every place in the locations as well to go through every place in the area and keep the ones with those categories. A place lists up to about ten categories, and it is kept when any of them is picked, so pick the close ones too (Lawyer, Divorce lawyer, Family law attorney) when businesses file themselves differently. Google Maps also uses names of its own beyond its official list, such as Attorney (its US name for Lawyer), Vacation rental or Subway station: they are in the field, shown next to the category they belong to (Lawyer (Solicitor, Attorney)), and picking Lawyer matches all of them. Categories match in the run's Language, in 38 languages, including English, Spanish, French, German, Portuguese, Italian, Dutch, Japanese and Chinese. Google Maps' own extra names were collected in English, Spanish, Portuguese, French, German, Italian and Dutch; in the other languages, the official names match. ### How do I set categories through the API? Pass the category names as the Categories field shows them, in English: "categories": ["Orthodontist", "Pediatric dentist"]. The other names in brackets in the field work too ("Attorney" or "Solicitor" for Lawyer), and the names stay the same whatever the run's Language, so you can copy them from the category and categories columns of an English run. A run with a name that is not a Google Maps category stops at the start and says which one. ### Can I get the shops inside a mall, or the restaurants at an airport? Yes. Turn on Businesses inside each place and search for the malls, outlet centres or airports (or paste their URLs). Every business in each place's Google Maps directory gets its own row, with located_in set to the mall and directory_section to the part of the directory it is listed in, and the mall's row shows places_inside_count. Barton Creek Square in Austin lists 214 businesses; Austin-Bergstrom airport 256. Filters and Categories apply to those businesses too, so a shopping mall search with Categories set to Shoe store gives the shoe shops inside the malls. Max places per search counts the malls a search finds, Max businesses per place caps each directory, and Max places in total caps the whole run: set it to stop after a number of shops. Each business is charged as a place. It works for malls, department stores, airports, stations, hospitals and medical centers, markets and food courts, universities, convention centers, stadiums and arenas, casinos, theme parks, hotels, tourist attractions and other large sites. You can leave it on whatever you search for: a dentist or restaurant search runs just as fast. ### Can I find businesses with bad ratings or few reviews? Yes. Set Max rating (for example up to 3.0) or Max reviews (for example 20) to find businesses with unhappy customers or new and small businesses. "Claimed by owner" finds listings the owner hasn't claimed yet. ### Will I get places outside the city I typed? No, not with "Only places inside the location" on (the default). Google shows nearby places around the edges of an area, so a search for Brooklyn also brings up Queens. The scraper keeps only the places in the location you typed. A postal code keeps only places with that postal code. Some districts, such as Shoreditch in London, never appear in Google's addresses, and you still get every place in them. Turn it off to keep everything around the area too: the in_location column then shows which places are outside it. ### What is a service-area business? A business that goes to its customers, such as a plumber, a cleaner or a mobile mechanic, can hide its street address on Google Maps and show the area it serves instead. These places have is_service_area set to true and no street or postal code. A search by postal code doesn't include them, since they have no postal code. ### Can I scrape hotels? Yes. Search hotel in a city: each hotel has a hotel object with its stars, check-in and check-out times, amenities, the nightly price for the dates Google picks and every booking site's offer (Booking.com, Expedia, the hotel's own site...), each with its price and link. Turn on Place details for the full amenities list. ### Will I get an email for every place? Only where the business publishes one on its own website. Many small businesses don't. You pay for emails and social profiles only for the places where the website gave something. ### Which email verifier should I pick? Any of the eight works for finding dead mailboxes. They differ on catch-all domains, which accept mail for every address, so a normal check can't tell a real mailbox from a made-up one. Reoon, ZeroBounce, NeverBounce, MillionVerifier, DeBounce and Truelist return catch_all for those. Bouncer and BounceBan also try to tell whether the address exists on a catch-all domain, at a higher price per check. Catch-all domains are common among businesses on Google Workspace. If your verifier fails mid-run (a timeout, the credits run out), the run carries on and the emails it couldn't check keep their free status. ### What company details do I get? When 📧 Emails and social profiles is on, each business comes with its company details, in legal_notice: | Field | What it is | |---|---| | legal_name, legal_form | The company's legal name and its form (GmbH, UG (haftungsbeschränkt), AG, e.U., SARL, SAS, Ltd, S.L., S.r.l., B.V., SRL, Einzelunternehmen...) | | registration_numbers | Each with its type, value and register: HRB or HRA with the Amtsgericht (Germany), FN with the court (Austria), UID (Switzerland), SIREN and SIRET with the RCS city (France), the company number (UK), partita IVA and REA (Italy), CIF (Spain), KvK (Netherlands), the enterprise number (Belgium) | | vat_ids | VAT IDs such as DE136695976 or ATU13585627, written without spaces | | share_capital | The amount and currency, with the text as written | | people | The owners, managing directors, directors and the person responsible for the content, each with their role as the business writes it and a role_type such as owner or managing_director | | page_url | The page the details come from | Only the business's own details: not its web designer's, host's or insurer's. It costs nothing extra. If you don't need people's names, for example for GDPR, turn off Names in company details. ### Where are company details strongest? It depends on what businesses in each country publish. In our tests on dentists, lawyers, plumbers and accountants: | Where | What to expect | |---|---| | Germany, Austria | The best results. Nearly every business gives its legal name, its register or VAT number and the owner or managing director by name. | | Switzerland | Most businesses give their legal name and UID. Fewer name a person. | | France, Belgium | About half to two thirds of businesses, usually with the SIREN or enterprise number. Some name the manager or the publication director. | | Italy, Spain | Often the partita IVA (Italy) or CIF (Spain). Legal names and people are rarer. | | UK, Netherlands | Fewer places, usually with the company or KvK number. People are rarely named. | | Outside Europe | Few places: most businesses outside Europe don't publish company details. | People are listed when the business names them with their role. Group websites with several locations can list a number for each location. ### Can I get all the reviews of the places? Reviews per place adds a few reviews to each row, filtered by date and keywords if you like. They are Google's own reviews: the partner reviews Google shows for some hotels (Tripadvisor, Booking.com) are not included. For every review, one row per review, feed the url or place_id column into Google Maps Reviews Scraper. ### Can I get the photos of each place? Yes. Set Photos per place (up to 200) to get each place's photos at full size, in the order Google's photo gallery shows them. From the date shown on the Pricing tab you pay per photo, 360 photo or video delivered (until then, once per place that gets photos); places without photos are free. - images lists the photo links. 360 photos count as photos. Videos come on top of your number (25 photos gave 25 to 32 items in our tests), are charged like photos, and are listed in image_details. - image_details has every photo and video collected, each with its full-size link, media_type (photo, video or 360), source_kind (posted on Google Maps by a visitor or the business, a hotel partner's photo, or Street View) and, for a video, its length and MP4 link. - Labels: Google labels a place's top photos (about 10) Inside, Outside, Food & drink, Team, Vibe or Products, so most photos have none (categories is null, or empty when Google ranked the photo but gave no label); image_categories counts the labels per place. They are included in the photo price. - Photo authors (off by default, no extra cost): who posted each photo (name, Google Maps profile and picture), whether it was the business itself, when it was uploaded and taken, its original size and the app it came through. Runs are slower with it, and authors' names are personal data: turn it on only if you need them. Photos come from the place's main gallery; by_owner marks the ones the business posted. ### Can I get popular times, the menu or "People also search"? No. Google Maps shows visitors who aren't signed in a limited view, and this scraper never signs in to a Google account. As of November 2026 the limited view has no popular times (busy hours or live busyness), menu link or menu, "People also search for", questions and answers, fuel prices for every grade, EV charger details, or the date the hours were last updated. Other scrapers that don't sign in see the same view, so these fields are usually empty there too. What Google still shows, this scraper gets: for prices, the fuel price on the map, hotel prices, and an estimate of the price per person from reviews (Place details). ### What happens when a run fails? The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 full details) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both. ## Run it - In Apify Console: https://apify.com/keklik/google-maps-leads-scraper - With the Apify API: POST https://api.apify.com/v2/acts/keklik~google-maps-leads-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN with the input JSON as the body. It returns the rows. - From an AI agent: connect the Apify MCP server (https://mcp.apify.com), add the Actor `keklik/google-maps-leads-scraper` and call it with the input. --- # Scraper: Instagram Comments Scraper > Paste links to Instagram posts or reels and get every comment, with its text, date, likes and the post it was left on. Instagram Comments Scraper takes links to Instagram posts or reels and returns every comment Instagram shows, newest first, back to the very first one. Each comment is one row with its text, date, likes, the commenter and the post it was left on. Replies to comments are not included, because Instagram shows them only to people who are logged in. - Web page: https://keklik.io/scrapers/instagram-comments-scraper - Apify Actor: `keklik/instagram-comments-scraper` (https://apify.com/keklik/instagram-comments-scraper) - You enter: Links to Instagram posts or reels - You get: Comment text, date, likes, the commenter and the post - Status: working, last tested 12 Nov 2026 - Needs: an Apify account (free is enough to try). No login to the site itself. ## Price per 1,000 comments US dollars, on each Apify plan. Apify's platform costs are included. Add-ons are charged only when switched on in the input. | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Comment: Each comment the scraper saves. | $1.00 | $0.90 | $0.80 | $0.70 | Apify's plans and a calculator: https://keklik.io/pricing.md ## Input The run input is a JSON object with these keys: - `urls` (array, required): Posts or reels. One per line: a post link, a reel link or just its shortcode, such as DeTUk4sDSp-. The posts must be public. - `maxCommentsPerPost` (integer, optional): Max comments per post. Stops each post after this many comments, newest first. Leave it empty for every top-level comment. - `newerThan` (string, optional): Newer than. A UTC date such as 2026-01-31, or a period back from now such as 24h, 7d or 2w. Leave it empty for comments of any age. - `maxResults` (integer, optional): Max results. Stops the whole run after this many comments, across all posts. Leave it empty for no limit. Example input: ```json { "urls": [ "https://www.instagram.com/p/DeTUk4sDSp-/", "https://www.instagram.com/p/DeJ28eTxo4s/", "https://www.instagram.com/p/DeaMlUSEpgs/", "https://www.instagram.com/p/DeSM5CYPDfd/", "https://www.instagram.com/p/DePHLhtON_i/", "https://www.instagram.com/p/DeMIwYYPAMt/", "https://www.instagram.com/p/DeK6OuDNzWC/", "https://www.instagram.com/p/DeKe6teEpya/", "https://www.instagram.com/p/DdG4RIxIPyf/", "https://www.instagram.com/p/DdhFkS7KGkZ/" ], "maxCommentsPerPost": 300 } ``` ## Output: one row per comment 23 fields in 5 groups. ### Comment - `text`: Comment text. Comment text. - `timestamp_datetime`: Date. When the comment was written, ISO 8601 in UTC. - `timestamp`: Date (Unix). When the comment was written, Unix seconds. - `likes_count`: Likes. Number of likes on the comment. - `is_edited`: Edited. True when the commenter edited the comment. - `is_covered`: Hidden as offensive. True when Instagram hides the comment behind a warning as possibly offensive. - `comment_url`: Comment URL. Link to the comment. - `comment_id`: Comment ID. Instagram comment ID, as a string. ### GIF comments - `giphy_url`: GIF URL. GIF image link, for GIF comments. Empty otherwise. - `giphy_id`: GIPHY ID. GIPHY ID, for GIF comments. Empty otherwise. ### Commenter - `owner_username`: Commenter username. Username of the commenter. - `owner_profile_url`: Commenter profile URL. Link to the commenter's profile. - `owner_profile_pic_url`: Commenter profile picture. Profile picture link of the commenter. Instagram image links expire after a while. - `owner_id`: Commenter ID. Instagram user ID of the commenter, as a string. - `owner_is_verified`: Commenter verified. True when the commenter has a verified badge. ### Post - `post_owner_full_name`: Post author name. Display name of the post's author. - `post_owner_username`: Post author username. Username of the post's author. - `post_owner_is_verified`: Post author verified. True when the post's author has a verified badge. - `post_comments_count`: Post comment count. Comment count Instagram shows on the post. It includes replies, which are not scraped. - `post_url`: Post URL. Link to the post or reel. - `post_owner_id`: Post author ID. Instagram user ID of the post's author, as a string. ### Search details - `source_url`: Input. The input this comment came from, as you entered it. - `scraping_time`: Scraped at. When the row was scraped, ISO 8601 in UTC. ## How it works 1. Paste the posts. Add as many post or reel links as you like, one per line. 2. Every comment, newest first. You get every comment Instagram shows, back to the very first one. Replies to comments are not included: Instagram shows them only to people who are logged in. 3. Keep only the comments you want. Keep only recent comments, or stop at a number per post or for the whole run. 4. Download your list. As a spreadsheet, in Google Sheets, or into your own reports. ## Use cases - Social listening: Read what people write under your posts, a competitor's or a campaign's, and catch complaints and questions early. - Sentiment analysis: Thousands of comments as a dataset for sentiment, topic or language analysis. - Giveaways: Every comment on a contest post, with usernames and dates, so you can pick winners fairly. - Checking influencers: See who comments on a creator's posts and how many of them are verified accounts. ## Good to know Instagram shows replies to logged-in users alone, so you get top-level comments only. Replies still count towards the total on the post, which is why you usually get fewer rows than that number. Comments Instagram has hidden or restricted are left out. ## Questions ### Is it legal to scrape Instagram comments? The scraper reads only what Instagram shows publicly to visitors who are not logged in. Comments are still personal data of the people who wrote them: their usernames, user IDs, profile pictures and words. If you are in the EU or handle data of people there, the GDPR applies, and other countries have similar laws. Make sure you have a lawful reason to collect and use the data, keep only what you need, and ask a lawyer if you are unsure. ### Do I need an Instagram account? No. You don't need an Instagram account, a login or cookies, and there is nothing to set up. Your own account is never used, so it cannot be blocked. ### Can I scrape replies to comments? No. Instagram shows replies only to logged-in users, so you get top-level comments only. Instagram counts replies in the comment total it shows on the post, so you usually get fewer rows than that total. On one reel showing 6,790 comments, the scraper returned 5,225 top-level comments. ### Can I sort comments by "most relevant"? No. "Most relevant" ordering is available only when logged in. Comments always come newest first. That is why Newer than is a cheap way to collect only recent comments: each post stops at the first comment older than your cutoff. ### How many comments can I get from one post? Every top-level comment Instagram shows. In our tests the scraper went back to the very first comment of a reel with 6,790 comments in about 7 minutes. Instagram leaves out comments it has hidden or restricted, so those don't appear. ### Can I scrape comments from private accounts? No. Posts of private accounts are not public, so they are reported as not_found. ### Can I get comments together with post data? Yes. The Instagram Post Scraper and Instagram Reels Scraper can add a few of each post's newest comments to their own rows with their Comments per post setting. Use this Instagram comments scraper when you want many comments per post, or each comment as a row of its own. ### What happens when a run fails? The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 full details) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both. ## Run it - In Apify Console: https://apify.com/keklik/instagram-comments-scraper - With the Apify API: POST https://api.apify.com/v2/acts/keklik~instagram-comments-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN with the input JSON as the body. It returns the rows. - From an AI agent: connect the Apify MCP server (https://mcp.apify.com), add the Actor `keklik/instagram-comments-scraper` and call it with the input. --- # Scraper: Zillow Property Listings Scraper > Paste a Zillow search for any US city or ZIP code and get the homes on it, for sale, sold or for rent, with price, address, beds, baths, size, photos and Zestimate, plus the agent's phone and MLS number if you want them. Zillow Property Listings Scraper takes any Zillow search for a US city, ZIP code or neighborhood and returns the homes on it, for sale, sold or for rent, up to about 980 for one search. Each home is one row with price, address, beds, baths, size, photos and Zestimate. The agent’s phone, MLS number, HOA, tax rate and price history are an optional add-on. - Web page: https://keklik.io/scrapers/zillow-property-listings-scraper - Apify Actor: `keklik/zillow-property-listings-scraper` (https://apify.com/keklik/zillow-property-listings-scraper) - You enter: A Zillow search link, or links to single homes - You get: Price, address, beds, baths, size, Zestimate, photos and listing date - Status: working, last tested 11 Nov 2026 - Needs: an Apify account (free is enough to try). No login to the site itself. ## Price per 1,000 listings US dollars, on each Apify plan. Apify's platform costs are included. Add-ons are charged only when switched on in the input. | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Listing: Each home the scraper saves. | $1.00 | $0.90 | $0.80 | $0.70 | | Property details (add-on): Charged on top of the listing when property details are on and they loaded. Links to single homes always include them. | $1.50 | $1.35 | $1.20 | $1.00 | Apify's plans and a calculator: https://keklik.io/pricing.md ## Input The run input is a JSON object with these keys: - `startUrls` (array, required): Zillow URLs. Search for a city, ZIP code or neighbourhood on zillow.com, set your filters, then copy the address. Links to single homes work too and always include the full details. - `propertyDetails` (boolean, optional, default false): Property details. Opens each listing for the description, agent contact, MLS record and price history. It is charged per listing as an add-on and the run takes longer. - `maxResultsPerUrl` (integer, optional, default 1000): Max results per URL. Stops each URL after this many homes. One Zillow search returns about 980 at most. - `status` (string, optional, default "Same as URL", one of "Same as URL", "Sold", "For rent"): Listing status. Keep the market your URL is set to, or switch every search to sold homes or to rentals. - `priceMin` (integer, optional): Min price. Lowest price in US dollars, or the monthly rent for rentals. Leave it empty to keep your URL's setting. - `priceMax` (integer, optional): Max price. Highest price in US dollars, or the monthly rent for rentals. Leave it empty to keep your URL's setting. - `beds` (string, optional, default "Any", one of "Any", "1+", "2+", "3+", "4+", "5+"): Bedrooms. Minimum number of bedrooms. Any keeps what your URL already has. - `baths` (string, optional, default "Any", one of "Any", "1+", "1.5+", "2+", "3+", "4+"): Bathrooms. Minimum number of bathrooms. Any keeps what your URL already has. - `homeType` (string, optional, default "Any", one of "Any", "Houses", "Townhomes", "Multi-family", "Condos/Co-ops", "Apartments", "Manufactured", "Lots/Land"): Home type. One type of property only. Apartment buildings that Zillow shows as a single card are skipped, while individual units are kept. - `daysOnSite` (string, optional, default "Any", one of "Any", "1 day", "7 days", "14 days", "30 days", "90 days", "6 months", "12 months", "24 months", "36 months"): Listed or sold within. Only homes listed within this period, from 1 day to 36 months. With Sold, it filters on the sale date instead. Example input: ```json { "startUrls": [ "https://www.zillow.com/austin-tx/" ], "priceMax": 500000, "beds": "3+", "homeType": "Houses", "maxResultsPerUrl": 12, "propertyDetails": true, "status": "Same as URL", "baths": "Any", "daysOnSite": "Any" } ``` ## Output: one row per listing 97 fields in 12 groups. ### Listing - `status`: Status. Listing status as Zillow labels it, for example FOR_SALE, SOLD, FOR_RENT or PENDING. - `broker_name`: Broker. Brokerage that published the listing. - `days_on_zillow`: Days on Zillow. Number of days the listing has been on Zillow. - `time_on_zillow`: Time on Zillow (ms). Time the listing has been on Zillow, in milliseconds. - `marketing_tagline`: Tagline. Short label Zillow prints on the listing, for example "3D Tour" or an open house time. - `content_type`: Listing card type. Kind of listing card Zillow shows for this home, for example openHouse or threeDHome. - `is_showcase_listing`: Showcase listing. True for Zillow Showcase listings, which have richer media and more details. - `is_featured_listing`: Featured listing. True when Zillow promotes the listing. - `is_zillow_owned`: Zillow owned. True when Zillow owns the home. ### Price and value - `price`: Price. Asking price as a number, in USD. For rentals, the monthly rent. Empty on sold listings: see Sold price. - `price_formatted`: Price (as shown). Price exactly as Zillow displays it, with the currency symbol. - `currency`: Currency. Currency of the price, for example USD. - `sold_price`: Sold price. Price of the most recent sale. On sold listings, what the home sold for. With Property details on, other listings show the previous sale price when Zillow has one. Empty in states that do not disclose sale prices, such as Texas. - `date_sold`: Date sold. Date of the most recent sale (UTC). - `price_change`: Last price change. Amount of the last price change. A negative number is a price cut. - `price_changed_at`: Price changed on. Date of the last price change (UTC). - `price_reduction`: Price reduction. Price reduction as Zillow displays it on the listing. - `zestimate`: Zestimate. Zillow's estimated market value of the home, in USD. - `rent_zestimate`: Rent Zestimate. Zillow's estimated monthly rent, in USD. - `tax_assessed_value`: Tax assessed value. Tax assessed value published by the county, in USD. ### Address and location - `full_address`: Address. Full address on one line. - `street`: Street. Street part of the address. - `unit`: Unit. Unit or apartment number, when the listing has one. - `city`: City. City. - `state`: State. Two-letter state code. - `zip_code`: ZIP code. ZIP code. - `country`: Country. Country. - `latitude`: Latitude. Latitude of the home. - `longitude`: Longitude. Longitude of the home. ### Home - `bed`: Bedrooms. Number of bedrooms. - `bath`: Bathrooms. Number of bathrooms. Zillow counts a half bath as 0.5. - `living_area`: Living area. Living area, in square feet. - `lot_area_value`: Lot size. Lot size, in the unit given by Lot size unit. - `lot_area_unit`: Lot size unit. Unit of the lot size: sqft or acres. - `home_type`: Home type. Type of property, for example SINGLE_FAMILY, CONDO, TOWNHOUSE, MULTI_FAMILY, APARTMENT, MANUFACTURED or LOT. ### Photos and tours - `main_image`: Main photo. Cover photo of the listing. - `photos`: Photos. List of photo URLs of the listing. - `photo_count`: Photo count. Number of photos. - `has_image`: Has photos. True when the listing has at least one photo. - `has_3d_model`: Has 3D tour. True when a 3D home tour is available. - `has_video`: Has video. True when a video is available. ### Sale type and open houses - `listing_source_label`: Listing source. How the listing reached Zillow, for example For Sale by Agent, For Sale by Owner or New Construction. - `is_fsba`: For sale by agent. True when the home is for sale by an agent. - `is_fsbo`: For sale by owner. True when the home is for sale by its owner. - `is_new_home`: New construction. True for new construction. - `is_coming_soon`: Coming soon. True when the home is coming soon and not yet on the market. - `is_pending`: Pending. True when the sale is pending or under contract. - `is_for_auction`: Auction. True when the home is for sale at auction. - `is_foreclosure`: Foreclosure. True for a foreclosure. - `is_bank_owned`: Bank owned. True when the home is bank owned (REO). - `is_open_house`: Open house scheduled. True when an open house is scheduled. - `open_house_description`: Open house. Open house as Zillow displays it, in local time. - `open_house_start_date`: Open house start. Start of the next open house (UTC). - `open_house_end_date`: Open house end. End of the next open house (UTC). ### Listing agent and MLS (add-on) - `agent_name`: Agent name. Name of the listing agent. Needs Property details. - `agent_phone`: Agent phone. Phone number of the listing agent. Needs Property details. - `agent_email`: Agent email. Email of the listing agent. Zillow rarely shows it, so it is usually empty. Needs Property details. - `broker_phone`: Broker phone. Phone number Zillow shows for the brokerage. Needs Property details. - `listing_provider`: Listing provider. Details of the listing provider, when Zillow shows them. Needs Property details. - `mls_id`: MLS number. MLS number of the listing. Needs Property details. - `mls_name`: MLS name. Name of the MLS the listing comes from. Needs Property details. - `mls_last_checked`: MLS last checked. When Zillow last checked the MLS, in the listing's local time. Needs Property details. - `mls_last_updated`: MLS last updated. When the MLS record last changed, in the listing's local time. Needs Property details. - `date_posted`: Date posted. Date the listing was posted (UTC). Needs Property details. ### Description, tour and saves (add-on) - `description`: Description. Full listing description written by the agent or owner. Needs Property details. - `home_insights`: Home highlights. Short highlight phrases Zillow draws from the listing, for example "Mature landscaping". Needs Property details. - `virtual_tour_url`: Virtual tour. Link to the virtual or 3D tour, when the listing has one. Needs Property details. - `page_view_count`: Page views. Number of views of the listing on Zillow. Needs Property details. - `favorite_count`: Saves. Number of Zillow users who saved the listing. Needs Property details. ### Home facts (add-on) - `year_built`: Year built. Year the home was built. Needs Property details. - `property_sub_type`: Property sub-type. Property sub-types, for example Single Family Residence. Needs Property details. - `neighborhood`: Neighborhood. Neighborhood name. Needs Property details. - `bathrooms_full`: Full bathrooms. Number of full bathrooms. Needs Property details. - `bathrooms_half`: Half bathrooms. Number of half bathrooms. Needs Property details. - `bathrooms_three_quarter`: Three-quarter bathrooms. Number of three-quarter bathrooms. Needs Property details. - `bathrooms_one_quarter`: Quarter bathrooms. Number of quarter bathrooms. Needs Property details. - `living_area_unit`: Living area unit. Unit of the living area. Needs Property details. - `time_zone`: Time zone. Time zone of the property. Needs Property details. - `at_a_glance_facts`: Facts at a glance. Zillow's at-a-glance facts (type, year built, heating, cooling, parking, HOA, lot and more), as label and value pairs. Usually only on Showcase listings. Needs Property details. ### Parking and garage (add-on) - `parking_capacity`: Parking spaces. Total number of parking spaces. Needs Property details. - `garage_parking_capacity`: Garage spaces. Number of garage spaces. Needs Property details. - `has_garage`: Has garage. True when the home has a garage. Needs Property details. - `has_attached_garage`: Attached garage. True when the garage is attached. Needs Property details. - `has_carport`: Has carport. True when the home has a carport. Needs Property details. - `has_open_parking`: Open parking. True when the home has open parking. Needs Property details. - `parking_features`: Parking features. Parking features listed in the MLS record. Needs Property details. ### Costs and price history (add-on) - `price_per_sqft`: Price per sq ft. Price per square foot, in USD. Needs Property details. - `monthly_hoa_fee`: Monthly HOA fee. Monthly HOA fee, in USD. Needs Property details. - `property_tax_rate`: Property tax rate. Effective property tax rate, in percent. Needs Property details. - `last_sold_price`: Last sold price. Price of the previous sale of this home, in USD. Needs Property details. - `price_history`: Price history. Past prices of the home as a list of {date, price}. Usually only available on Zillow Showcase listings, so it is empty on most homes. Needs Property details. - `mortgage_rate_30y`: 30-year fixed rate. Zillow 30-year fixed mortgage rate quoted on the listing, in percent. Needs Property details. - `mortgage_rate_15y`: 15-year fixed rate. Zillow 15-year fixed mortgage rate quoted on the listing, in percent. Needs Property details. - `mortgage_rate_5y_arm`: 5-year ARM rate. Zillow 5-year adjustable mortgage rate quoted on the listing, in percent. Needs Property details. ### Zillow link and scrape time - `url`: Listing URL. Link to the listing on Zillow. - `zpid`: Zillow ID. Zillow Property ID (zpid), the number that identifies the home on Zillow. - `scraping_time`: Scraped at. When the row was scraped (UTC, ISO 8601). ## How it works 1. Paste a Zillow search. Search zillow.com for a city, ZIP code or neighborhood and copy the link. Add as many searches or single homes as you like. 2. Up to about 980 homes per search. That is the most Zillow shows for one search. Split a big area by ZIP code or price range for more, and a home found twice appears once. 3. Keep only the homes you want. Switch to sold homes or rentals, and filter by price, beds, baths, home type and how recently the home was listed. 4. Download your list. As a spreadsheet, in Google Sheets, or into your CRM. ## Use cases - Finding deals: Compare asking prices with the Zestimate and the tax assessed value, and spot the homes with recent price cuts. - Tracking a market: Stock levels, price per square foot and days on Zillow by city or ZIP code, or recent sales with the Sold filter. - Outreach to agents and brokers: With property details on, each listing carries the agent's name and phone, the broker's phone and the MLS number. - Rental research: Monthly rents and Rent Zestimates compared across neighbourhoods. ## Good to know One Zillow search returns about 980 homes at most, even when it claims a bigger total. To cover a larger area, split it into several searches by ZIP code or price band and add each URL. Homes that appear in more than one are exported once. ## Questions ### Is it legal to scrape Zillow? This scraper only collects data that Zillow shows publicly to any visitor, without logging in. Listings can include personal data, such as the names and phone numbers of agents. If you collect personal data, make sure you have a lawful reason to do so and follow the rules that apply to you, such as GDPR or CCPA. If you are unsure, ask a lawyer. ### Do I need a Zillow account? No. You don't need a Zillow account, login or cookies. Paste a URL and start the run. ### How many listings can I get from one Zillow search? Zillow shows at most about 980 listings for any one search, whatever total it displays. To collect more, split the search by ZIP code or by price range and add each one as its own URL. A listing that appears in several of your searches is exported only once. ### Can I scrape sold homes and rentals? Yes. Use a sold or rental search URL, or set Listing status to Sold or For rent. Some states, such as Texas, do not disclose sale prices, so the sold price can be empty there. Zillow shows many apartment complexes as one card per building with no single price; those cards are skipped, so a rentals search can return fewer rows than Zillow's count. Houses and individual units for rent are exported normally. ### Can I filter by price, bedrooms or home type? Yes. Set the filters on zillow.com before you copy the search link, or set them in the scraper: sold or for rent, min and max price, bedrooms, bathrooms, home type, and how recently the home was listed or sold. They apply to every search link you add. ### Why are some details missing? Some fields depend on the listing. Sold and off-market homes have no description or price history on Zillow, though the MLS record and year built are usually there. Price history and the at-a-glance facts mostly appear on Zillow Showcase listings. The Zestimate is empty when Zillow does not show one for the home. With Property details on, a listing whose details could not be loaded keeps its basic row. ### Can I get the listing agent's phone and email? Turn on Property details. You then get the listing agent's name and phone, and the broker's phone, whenever the listing shows them. Zillow almost never shows agent emails, so that column is usually empty. ### Can I track new listings and price cuts? Yes. Schedule the scraper on Apify to run every day or week, with Listed or sold within set to 1 day or 7 days to get only the new homes. Each row shows the number of days the home has been on Zillow and, when the price changed, the last price change and its date. ### What happens when a run fails? The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 full details) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both. ## Run it - In Apify Console: https://apify.com/keklik/zillow-property-listings-scraper - With the Apify API: POST https://api.apify.com/v2/acts/keklik~zillow-property-listings-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN with the input JSON as the body. It returns the rows. - From an AI agent: connect the Apify MCP server (https://mcp.apify.com), add the Actor `keklik/zillow-property-listings-scraper` and call it with the input. --- # Scraper: LinkedIn Company Scraper > Turn a list of company names or LinkedIn links into website, industry, size, employee count, headquarters and every office location. LinkedIn Company Scraper turns a list of company names, LinkedIn page links or company IDs into one row per company: website, industry, company size, employee and follower counts, headquarters, every office location and similar companies. It needs no LinkedIn account, so it’s a quick way to fill in missing company details in a CRM. - Web page: https://keklik.io/scrapers/linkedin-company-scraper - Apify Actor: `keklik/linkedin-company-scraper` (https://apify.com/keklik/linkedin-company-scraper) - You enter: Company names, LinkedIn page links or company IDs - You get: Website, industry, company size, employees, followers, headquarters and offices - Status: working, last tested 11 Nov 2026 - Needs: an Apify account (free is enough to try). No login to the site itself. ## Price per 1,000 companies US dollars, on each Apify plan. Apify's platform costs are included. Add-ons are charged only when switched on in the input. | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Company | $2.50 | $2.20 | $1.90 | $1.40 | Apify's plans and a calculator: https://keklik.io/pricing.md ## Input The run input is a JSON object with these keys: - `companies` (array, required): Companies. LinkedIn company or showcase page URLs (linkedin.com/company/stripe), page names as in the URL (stripe), or numeric LinkedIn company IDs. A company ID only works when the company has open jobs on LinkedIn. University pages (/school/) are not supported. - `maxResults` (integer, optional): Max companies. Scrape only the first this-many companies of the list. Leave empty for all. Example input: ```json { "companies": [ "https://www.linkedin.com/company/medtronic", "https://www.linkedin.com/company/stryker", "https://www.linkedin.com/company/boston-scientific", "https://www.linkedin.com/company/roche", "https://www.linkedin.com/company/pfizer", "https://www.linkedin.com/company/sanofi", "https://www.linkedin.com/company/astrazeneca", "https://www.linkedin.com/company/eli-lilly-and-company", "https://www.linkedin.com/company/franks-air-conditioning", "https://www.linkedin.com/company/corman-sons-air-conditioning", "https://www.linkedin.com/company/voiceandhands", "https://www.linkedin.com/company/pine-castle", "https://www.linkedin.com/company/jbprogroup", "https://www.linkedin.com/company/dracoe", "https://www.linkedin.com/company/amigrp", "https://www.linkedin.com/company/joy101", "https://www.linkedin.com/company/echelonfit", "https://www.linkedin.com/company/amgen", "https://www.linkedin.com/company/novartis", "https://www.linkedin.com/company/gsk", "https://www.linkedin.com/company/novo-nordisk", "https://www.linkedin.com/company/allergan-aesthetics", "https://www.linkedin.com/company/palantir-technologies", "https://www.linkedin.com/company/scaleai", "https://www.linkedin.com/company/lunchclub", "https://www.linkedin.com/company/cognition-ai-labs", "https://www.linkedin.com/company/8vc", "https://www.linkedin.com/company/arcanaanalytics", "https://www.linkedin.com/company/blackrock", "https://www.linkedin.com/company/alphasense", "https://www.linkedin.com/company/masttro", "https://www.linkedin.com/company/canoe-intelligence", "https://www.linkedin.com/company/sequoia", "https://www.linkedin.com/company/accel-vc", "https://www.linkedin.com/company/lightspeed-venture-partners", "https://www.linkedin.com/company/general-catalyst", "https://www.linkedin.com/company/bessemer-venture-partners", "https://www.linkedin.com/company/the-founders-fund", "https://www.linkedin.com/company/index-ventures", "https://www.linkedin.com/company/khosla-ventures", "https://www.linkedin.com/company/anthropicresearch", "https://www.linkedin.com/company/thrive-capital", "https://www.linkedin.com/company/salesforce", "https://www.linkedin.com/company/atlassian", "https://www.linkedin.com/company/netflix", "https://www.linkedin.com/company/meta", "https://www.linkedin.com/company/apple", "https://www.linkedin.com/company/frame-io", "https://www.linkedin.com/company/acquisition-professionals-llc", "https://www.linkedin.com/company/dssp-consulting-inc-", "https://www.linkedin.com/company/windsorgroupllc", "https://www.linkedin.com/company/crgteam", "https://www.linkedin.com/company/metrostar-systems", "https://www.linkedin.com/company/odrgllc", "https://www.linkedin.com/company/govcio", "https://www.linkedin.com/company/bow-wave-llc", "https://www.linkedin.com/company/saputo", "https://www.linkedin.com/company/lactalis-canada", "https://www.linkedin.com/company/maple-leaf-foods", "https://www.linkedin.com/company/olymel", "https://www.linkedin.com/company/sofina-foods-inc-", "https://www.linkedin.com/company/bimbo-canada", "https://www.linkedin.com/company/lassonde", "https://www.linkedin.com/company/cascades", "https://www.linkedin.com/company/mccainfoods", "https://www.linkedin.com/company/accenture", "https://www.linkedin.com/company/leidos", "https://www.linkedin.com/company/guidehouse", "https://www.linkedin.com/company/ernstandyoung", "https://www.linkedin.com/company/techwolf", "https://www.linkedin.com/company/osapiens", "https://www.linkedin.com/company/parloa", "https://www.linkedin.com/company/harmattan-ai", "https://www.linkedin.com/company/elevenlabs", "https://www.linkedin.com/company/pennylaneaccounting", "https://www.linkedin.com/company/showpad", "https://www.linkedin.com/company/synthesia-technologies", "https://www.linkedin.com/company/lovable-dev", "https://www.linkedin.com/company/mewssystem", "https://www.linkedin.com/company/medstar-health", "https://www.linkedin.com/company/holy-cross-health", "https://www.linkedin.com/company/adventist-health", "https://www.linkedin.com/company/childrens-national", "https://www.linkedin.com/company/kaiser-permanente", "https://www.linkedin.com/company/ummedicalsystem", "https://www.linkedin.com/company/inovahealth", "https://www.linkedin.com/company/johns-hopkins-medicine", "https://www.linkedin.com/company/lifebridge-health", "https://www.linkedin.com/company/luminishealth", "https://www.linkedin.com/company/fort-washington-mc", "https://www.linkedin.com/company/mortenson", "https://www.linkedin.com/company/je-dunn-construction", "https://www.linkedin.com/company/mcgough-construction", "https://www.linkedin.com/company/kraus-anderson-construction-company", "https://www.linkedin.com/company/ryan-companies-us-inc-", "https://www.linkedin.com/company/knutson-construction-services", "https://www.linkedin.com/company/swinerton", "https://www.linkedin.com/company/dpr-construction-inc", "https://www.linkedin.com/company/klarna", "https://www.linkedin.com/company/sofi", "https://www.linkedin.com/company/chime-card", "https://www.linkedin.com/company/ramp", "https://www.linkedin.com/company/airbnb", "https://www.linkedin.com/company/toast-inc", "https://www.linkedin.com/company/paybright-canada", "https://www.linkedin.com/company/ascertain-ai", "https://www.linkedin.com/company/hume-ai", "https://www.linkedin.com/company/asia-pacific-land", "https://www.linkedin.com/company/caregentic", "https://www.linkedin.com/company/optainhealth", "https://www.linkedin.com/company/wavelet-medical", "https://www.linkedin.com/company/redesign-health", "https://www.linkedin.com/company/northwell-holdings", "https://www.linkedin.com/company/truenorth-health-ventures", "https://www.linkedin.com/company/rackspace-technology", "https://www.linkedin.com/company/cdi-llc", "https://www.linkedin.com/company/presidio-", "https://www.linkedin.com/company/world-wide-technology", "https://www.linkedin.com/company/cdw", "https://www.linkedin.com/company/carlsonhallsolutions", "https://www.linkedin.com/company/hcltech", "https://www.linkedin.com/company/servicenow", "https://www.linkedin.com/company/shi-international-corp-", "https://www.linkedin.com/company/ibm", "https://www.linkedin.com/company/amway-india-enterprises-private-limited", "https://www.linkedin.com/company/nutrilite-do-brasil", "https://www.linkedin.com/company/herbalife", "https://www.linkedin.com/company/amway-esan", "https://www.linkedin.com/company/amway-malaysia-singapore-brunei", "https://www.linkedin.com/company/meijer", "https://www.linkedin.com/company/steelcase", "https://www.linkedin.com/company/nu-skin-enterprises", "https://www.linkedin.com/company/unilever", "https://www.linkedin.com/company/amwayforpeople", "https://www.linkedin.com/company/albany-engineered-composites-commercy", "https://www.linkedin.com/company/taschibraoficial", "https://www.linkedin.com/company/somosfey", "https://www.linkedin.com/company/heimbach-group", "https://www.linkedin.com/company/astenjohnson", "https://www.linkedin.com/company/incofios", "https://www.linkedin.com/company/wanke-eletrodom%C3%A9sticos", "https://www.linkedin.com/company/muellereletrodomesticos", "https://www.linkedin.com/company/metisa", "https://www.linkedin.com/company/ipelprofessional", "https://www.linkedin.com/company/shiftcarehealth", "https://www.linkedin.com/company/claimright-medical-billing", "https://www.linkedin.com/company/bee-development-authority", "https://www.linkedin.com/company/westfield-urgent-care", "https://www.linkedin.com/company/jani-king-of-charlotte", "https://www.linkedin.com/company/titan-anesthesiatx", "https://www.linkedin.com/company/awakenedacceleration", "https://www.linkedin.com/company/mediq-urgent-care", "https://www.linkedin.com/company/nutrition-empowered-llc", "https://www.linkedin.com/company/megra-tr", "https://www.linkedin.com/company/alaska-native-tribal-health-consortium", "https://www.linkedin.com/company/hca", "https://www.linkedin.com/company/searhc", "https://www.linkedin.com/company/state-of-alaska", "https://www.linkedin.com/company/central-peninsula-hospital", "https://www.linkedin.com/company/south-peninsula-hospital", "https://www.linkedin.com/company/southcentral-foundation", "https://www.linkedin.com/company/providencehealthsystem", "https://www.linkedin.com/company/bartlett-regional-hospital", "https://www.linkedin.com/company/department-of-veterans-affairs", "https://www.linkedin.com/company/stormwater-compliance-solutions-llc", "https://www.linkedin.com/company/fusioncapitalpartners", "https://www.linkedin.com/company/energyandoceans", "https://www.linkedin.com/company/aqualisasa", "https://www.linkedin.com/company/aqualisdz", "https://www.linkedin.com/company/aqualisforcleanerwater", "https://www.linkedin.com/company/full-circle-environmental-llc", "https://www.linkedin.com/company/aqualis-partners", "https://www.linkedin.com/company/aas-facility-management-alg%C3%A9rie", "https://www.linkedin.com/company/dragonfly-pond-works", "https://www.linkedin.com/company/v2x-inc", "https://www.linkedin.com/company/jacobs", "https://www.linkedin.com/company/dyncorp-international", "https://www.linkedin.com/company/kbr-inc", "https://www.linkedin.com/company/saicinc", "https://www.linkedin.com/company/pae", "https://www.linkedin.com/company/mastercard", "https://www.linkedin.com/company/visa", "https://www.linkedin.com/company/citi", "https://www.linkedin.com/company/wellsfargo", "https://www.linkedin.com/company/barclays-bank", "https://www.linkedin.com/company/goldman-sachs", "https://www.linkedin.com/company/flipkart", "https://www.linkedin.com/company/whole-foods-market", "https://www.linkedin.com/company/twitch-tv", "https://www.linkedin.com/company/lab126", "https://www.linkedin.com/company/amazon-business", "https://www.linkedin.com/company/amazon-fulfillment-technologies-robotics", "https://www.linkedin.com/company/souq-com", "https://www.linkedin.com/company/goodreads-com", "https://www.linkedin.com/company/imdb-com", "https://www.linkedin.com/company/amazon-music", "https://www.linkedin.com/company/ring-labs", "https://www.linkedin.com/company/shopbop", "https://www.linkedin.com/company/amazon-development-center-poland", "https://www.linkedin.com/company/abebooks", "https://www.linkedin.com/company/alexa-internet", "https://www.linkedin.com/company/a9-com", "https://www.linkedin.com/company/annapurna-labs", "https://www.linkedin.com/company/woot-inc.", "https://www.linkedin.com/company/curse-inc", "https://www.linkedin.com/company/quidsi-inc.", "https://www.linkedin.com/company/createspace", "https://www.linkedin.com/company/comixology", "https://www.linkedin.com/company/lovefilm", "https://www.linkedin.com/company/thinkbox-software-inc.", "https://www.linkedin.com/company/brilliance-publishing", "https://www.linkedin.com/company/liquavista", "https://www.linkedin.com/company/perceive-io", "https://www.linkedin.com/company/amazonhelp", "https://www.linkedin.com/company/customer-value-partners", "https://www.linkedin.com/company/titan-auxo", "https://www.linkedin.com/company/prometheusfederalservices", "https://www.linkedin.com/company/aptive-resources", "https://www.linkedin.com/company/trilogy-federal", "https://www.linkedin.com/company/blue-water-thinking", "https://www.linkedin.com/company/ansible", "https://www.linkedin.com/company/everforthecs", "https://www.linkedin.com/company/gritter-francona", "https://www.linkedin.com/company/alpine-investors", "https://www.linkedin.com/company/thewrenchgroup", "https://www.linkedin.com/company/vertexservicepartners", "https://www.linkedin.com/company/turnpointservices", "https://www.linkedin.com/company/redwood-services-llc", "https://www.linkedin.com/company/legacyservicepartners", "https://www.linkedin.com/company/silaservices", "https://www.linkedin.com/company/flintgroup", "https://www.linkedin.com/company/nexstarnetwork", "https://www.linkedin.com/company/toll-brothers", "https://www.linkedin.com/company/meritage-homes", "https://www.linkedin.com/company/lennar", "https://www.linkedin.com/company/david-weekley-homes", "https://www.linkedin.com/company/starlight-homes", "https://www.linkedin.com/company/perry-homes", "https://www.linkedin.com/company/taylor-morrison", "https://www.linkedin.com/company/beazer-homes", "https://www.linkedin.com/company/opi-inc", "https://www.linkedin.com/company/kiara-sky-professional-nails", "https://www.linkedin.com/company/youngnailsinc", "https://www.linkedin.com/company/cnd", "https://www.linkedin.com/company/dnd-uv-gels", "https://www.linkedin.com/company/the-gelbottle-inc", "https://www.linkedin.com/company/nails-inc", "https://www.linkedin.com/company/e-l-f-beauty", "https://www.linkedin.com/company/rarebeautyofficial", "https://www.linkedin.com/company/v-beauty-pure", "https://www.linkedin.com/company/lululemon", "https://www.linkedin.com/company/aloyoga", "https://www.linkedin.com/company/skimsbody", "https://www.linkedin.com/company/sephora", "https://www.linkedin.com/company/summer-fridays", "https://www.linkedin.com/company/reformation", "https://www.linkedin.com/company/vuori-inc-", "https://www.linkedin.com/company/glossier", "https://www.linkedin.com/company/crystal-dynamics", "https://www.linkedin.com/company/certain-affinity", "https://www.linkedin.com/company/saberinteractive", "https://www.linkedin.com/company/cloud-imperium-games", "https://www.linkedin.com/company/nintendo", "https://www.linkedin.com/company/aspyr-labs-and-services", "https://www.linkedin.com/company/2k-games", "https://www.linkedin.com/company/kingsisle-entertainment", "https://www.linkedin.com/company/riot-games", "https://www.linkedin.com/company/state-of-arkansas_2", "https://www.linkedin.com/company/arkbluecross", "https://www.linkedin.com/company/baptist-health_394296", "https://www.linkedin.com/company/carti", "https://www.linkedin.com/company/arkansas-heart-hospital", "https://www.linkedin.com/company/washington-regional-medical-center", "https://www.linkedin.com/company/mercy", "https://www.linkedin.com/company/arkansasdhs", "https://www.linkedin.com/company/alwmedschool", "https://www.linkedin.com/company/chi-st-vincent", "https://www.linkedin.com/company/koniag-government-services", "https://www.linkedin.com/company/it-glue", "https://www.linkedin.com/company/coldsunenterprise", "https://www.linkedin.com/company/atlas-space-operations", "https://www.linkedin.com/company/broadstaff", "https://www.linkedin.com/company/abbadox", "https://www.linkedin.com/company/usclaro", "https://www.linkedin.com/company/3stepit", "https://www.linkedin.com/company/cardonecapital", "https://www.linkedin.com/company/optum", "https://www.linkedin.com/company/elevance-health", "https://www.linkedin.com/company/humana", "https://www.linkedin.com/company/centene-corporation", "https://www.linkedin.com/company/cvshealth", "https://www.linkedin.com/company/ascendion", "https://www.linkedin.com/company/adventhealth", "https://www.linkedin.com/company/trinityhealth", "https://www.linkedin.com/company/molina-healthcare", "https://www.linkedin.com/company/ascension-seton", "https://www.linkedin.com/company/ministry-health-care", "https://www.linkedin.com/company/st--john-providence-health-system", "https://www.linkedin.com/company/lourdes-hospital", "https://www.linkedin.com/company/dell-childrens-foundation", "https://www.linkedin.com/company/ascension-living", "https://www.linkedin.com/company/the-resource-group-spend-management-solutions", "https://www.linkedin.com/company/providence-hospital", "https://www.linkedin.com/company/borgess-health", "https://www.linkedin.com/company/columbia-st-marys", "https://www.linkedin.com/company/st-vincent-indianapolis-hospital", "https://www.linkedin.com/company/st-vincent's-health-services-bridgeport-ct", "https://www.linkedin.com/company/st-mary's-healthcare-amsterdam", "https://www.linkedin.com/company/st.-agnes-hospital", "https://www.linkedin.com/company/crittenton-hospital-medical-center", "https://www.linkedin.com/company/affinity-health-system", "https://www.linkedin.com/company/ascension-providence", "https://www.linkedin.com/company/st--mary's-of-michigan", "https://www.linkedin.com/company/providence-hospital_2", "https://www.linkedin.com/company/providence-hospital-mobile", "https://www.linkedin.com/company/ascension-depaul-services", "https://www.linkedin.com/company/saint-john's-health-system", "https://www.linkedin.com/company/midwest-orthopedic-specialty-hospital", "https://www.linkedin.com/company/columbia-hospital", "https://www.linkedin.com/company/middle-tennessee-medical-center", "https://www.linkedin.com/company/regional-medical-laboratory", "https://www.linkedin.com/company/daughters-of-charity-services-of-arkansas", "https://www.linkedin.com/company/rubicon-founders", "https://www.linkedin.com/company/loyalfordogs", "https://www.linkedin.com/company/find-solace", "https://www.linkedin.com/company/talkiatry", "https://www.linkedin.com/company/nestwholefamilyhealth", "https://www.linkedin.com/company/complyancehq", "https://www.linkedin.com/company/thymecare", "https://www.linkedin.com/company/familywell", "https://www.linkedin.com/company/west-cancer-center-research-institute", "https://www.linkedin.com/company/daymarkhealth", "https://www.linkedin.com/company/spotify", "https://www.linkedin.com/company/penguin-random-house-publishing", "https://www.linkedin.com/company/book-of-the-month", "https://www.linkedin.com/company/harpercollins", "https://www.linkedin.com/company/scholastic", "https://www.linkedin.com/company/barnes-&-noble", "https://www.linkedin.com/company/audible-gmbh", "https://www.linkedin.com/company/shortletapp", "https://www.linkedin.com/company/stack-overflow", "https://www.linkedin.com/company/cockroach-labs", "https://www.linkedin.com/company/permitflow", "https://www.linkedin.com/company/questdb", "https://www.linkedin.com/company/ory-corp", "https://www.linkedin.com/company/mongodbinc", "https://www.linkedin.com/company/go-teleport", "https://www.linkedin.com/company/fermyon", "https://www.linkedin.com/company/clickhouseinc", "https://www.linkedin.com/company/sonic-automotive", "https://www.linkedin.com/company/penskeautomotive", "https://www.linkedin.com/company/lithiadriveway", "https://www.linkedin.com/company/group1automotive", "https://www.linkedin.com/company/asbury-automotive-group", "https://www.linkedin.com/company/cox-automotive-inc-", "https://www.linkedin.com/company/carvana", "https://www.linkedin.com/company/hendrick-automotive-group", "https://www.linkedin.com/company/carmax", "https://www.linkedin.com/company/chewy-com", "https://www.linkedin.com/company/dassaultsystemes", "https://www.linkedin.com/company/procore-technologies", "https://www.linkedin.com/company/getmaintainx", "https://www.linkedin.com/company/trimble", "https://www.linkedin.com/company/select-medical", "https://www.linkedin.com/company/banner-health", "https://www.linkedin.com/company/encompasshealth", "https://www.linkedin.com/company/phoenix-childrens", "https://www.linkedin.com/company/abrazo-health-care", "https://www.linkedin.com/company/mayo-clinic", "https://www.linkedin.com/company/honorhealth", "https://www.linkedin.com/company/honorhealth-rehabilitation", "https://www.linkedin.com/company/dignity-health", "https://www.linkedin.com/company/brooks-rehabilitation", "https://www.linkedin.com/company/stollegroup", "https://www.linkedin.com/company/vantryx", "https://www.linkedin.com/company/stemboard", "https://www.linkedin.com/company/cahaba-federal", "https://www.linkedin.com/company/avalore-group", "https://www.linkedin.com/company/darkwolfsolutions", "https://www.linkedin.com/company/jmunds", "https://www.linkedin.com/company/amtrak", "https://www.linkedin.com/company/universityhealthsa", "https://www.linkedin.com/company/methodist-healthcare-system", "https://www.linkedin.com/company/tenet-healthcare", "https://www.linkedin.com/company/methodist-health-system", "https://www.linkedin.com/company/bswhealth", "https://www.linkedin.com/company/skin-gym-co", "https://www.linkedin.com/company/paintlabbeauty", "https://www.linkedin.com/company/facegym", "https://www.linkedin.com/company/skin-camp", "https://www.linkedin.com/company/adella-digital", "https://www.linkedin.com/company/future-beauty-brands", "https://www.linkedin.com/company/axbeautybrands", "https://www.linkedin.com/company/ilia-beauty", "https://www.linkedin.com/company/tower28beauty", "https://www.linkedin.com/company/baxter-healthcare", "https://www.linkedin.com/company/philips", "https://www.linkedin.com/company/parata-systems", "https://www.linkedin.com/company/beckman-coulter", "https://www.linkedin.com/company/danaher", "https://www.linkedin.com/company/thermo-fisher-scientific", "https://www.linkedin.com/company/cytiva", "https://www.linkedin.com/company/bio-rad", "https://www.linkedin.com/company/agilent-technologies", "https://www.linkedin.com/company/goodecompanyrestaurants", "https://www.linkedin.com/company/landmark-houston-hospitality-group", "https://www.linkedin.com/company/alifehospitalitygroup", "https://www.linkedin.com/company/pappasrestaurants", "https://www.linkedin.com/company/underbelly-hospitality", "https://www.linkedin.com/company/landry's-restaurants", "https://www.linkedin.com/company/fbsociety", "https://www.linkedin.com/company/spb-hospitality", "https://www.linkedin.com/company/culinary-khancepts", "https://www.linkedin.com/company/tao-group-hospitality", "https://www.linkedin.com/company/ubsarena", "https://www.linkedin.com/company/thebicestercollection", "https://www.linkedin.com/company/new-york-islanders", "https://www.linkedin.com/company/msg-entertainment", "https://www.linkedin.com/company/bicestervillage", "https://www.linkedin.com/company/the-new-york-racing-association", "https://www.linkedin.com/company/northwell-health", "https://www.linkedin.com/company/americana-manhasset", "https://www.linkedin.com/company/oak-view-group", "https://www.linkedin.com/company/belmont-park-entertainment", "https://www.linkedin.com/company/d-robotics", "https://www.linkedin.com/company/watneyrobotics", "https://www.linkedin.com/company/kinisi-robotics", "https://www.linkedin.com/company/xpengglobal", "https://www.linkedin.com/company/agilityrobotics", "https://www.linkedin.com/company/apptronik-inc.", "https://www.linkedin.com/company/pudurobotics", "https://www.linkedin.com/company/co-bot", "https://www.linkedin.com/company/miso-robotics", "https://www.linkedin.com/company/skildai", "https://www.linkedin.com/company/darden", "https://www.linkedin.com/company/outback-steakhouse", "https://www.linkedin.com/company/boldhospitalitycompany", "https://www.linkedin.com/company/bloominbrandsbrasil", "https://www.linkedin.com/company/first-watch-restaurant", "https://www.linkedin.com/company/yum-brands", "https://www.linkedin.com/company/brinker-international", "https://www.linkedin.com/company/outbackbrasil", "https://www.linkedin.com/company/checkers-&-rally%E2%80%99s-drive-in-restaurants", "https://www.linkedin.com/company/carrabba's-italian-grill", "https://www.linkedin.com/company/bonefish-grill", "https://www.linkedin.com/company/fleming-s-prime-steakhouse-wine-bar", "https://www.linkedin.com/company/pangborn-corporation", "https://www.linkedin.com/company/wheelabrator-group", "https://www.linkedin.com/company/cogeim-europe-srl", "https://www.linkedin.com/company/turbotecnica-engeenering-s-p-a-", "https://www.linkedin.com/company/sinto-america", "https://www.linkedin.com/company/norican-group", "https://www.linkedin.com/company/omsg---officine-meccaniche-san-giorgio-spa", "https://www.linkedin.com/company/viking-corporation", "https://www.linkedin.com/company/snap-on", "https://www.linkedin.com/company/modine-manufacturing-company", "https://www.linkedin.com/company/affinia-healthcare", "https://www.linkedin.com/company/carestlhealth", "https://www.linkedin.com/company/peoples-family-of-corporations", "https://www.linkedin.com/company/family-care-health-centers", "https://www.linkedin.com/company/st--louis-integrated-health-network", "https://www.linkedin.com/company/chcmissouri", "https://www.linkedin.com/company/ssm-health-care", "https://www.linkedin.com/company/bjc-healthcare", "https://www.linkedin.com/company/st.-louis-county", "https://www.linkedin.com/company/raytheon", "https://www.linkedin.com/company/anduril", "https://www.linkedin.com/company/st-jude-childrens-research-hospital", "https://www.linkedin.com/company/regional-one-health", "https://www.linkedin.com/company/st-jude-childrens-research-hospital-alsac", "https://www.linkedin.com/company/lebonheurchildrens", "https://www.linkedin.com/company/city-of-memphis", "https://www.linkedin.com/company/bmgbaptistmedicalgroup", "https://www.linkedin.com/company/baptist-memorial-hospital-memphis", "https://www.linkedin.com/company/airbusgroup", "https://www.linkedin.com/company/geaerospace", "https://www.linkedin.com/company/airbus", "https://www.linkedin.com/company/rolls-royce", "https://www.linkedin.com/company/collins-aerospace", "https://www.linkedin.com/company/rtx", "https://www.linkedin.com/company/l3harris-technologies", "https://www.linkedin.com/company/cdg-a-boeing-company", "https://www.linkedin.com/company/boeingvancouver", "https://www.linkedin.com/company/stlukeshealthsystem", "https://www.linkedin.com/company/regence-blueshield-of-idaho", "https://www.linkedin.com/company/saint-alphonsus-health-system", "https://www.linkedin.com/company/cambia-health-solutions", "https://www.linkedin.com/company/simplot-company", "https://www.linkedin.com/company/stateofidahoemployment", "https://www.linkedin.com/company/blue-cross-of-idaho-foundation-for-health", "https://www.linkedin.com/company/micron-technology", "https://www.linkedin.com/company/city-of-boise", "https://www.linkedin.com/company/blue-cross-and-blue-shield-association", "https://www.linkedin.com/company/klaviyo", "https://www.linkedin.com/company/amplitude-analytics", "https://www.linkedin.com/company/iterable", "https://www.linkedin.com/company/hubspot", "https://www.linkedin.com/company/attentivehq", "https://www.linkedin.com/company/bloomreach", "https://www.linkedin.com/company/gong-io", "https://www.linkedin.com/company/national-signs", "https://www.linkedin.com/company/humble-sign-co", "https://www.linkedin.com/company/ezzi-signs", "https://www.linkedin.com/company/bakers'-sign-and-manufacturing", "https://www.linkedin.com/company/atlas-sign-industries", "https://www.linkedin.com/company/signs-by-g", "https://www.linkedin.com/company/jones-sign-co--inc-", "https://www.linkedin.com/company/creative-sign-designs", "https://www.linkedin.com/company/poblocki-sign-company", "https://www.linkedin.com/company/egan-sign", "https://www.linkedin.com/company/7brewcoffee", "https://www.linkedin.com/company/whobrewllc", "https://www.linkedin.com/company/servehg", "https://www.linkedin.com/company/7crew-enterprises-llc", "https://www.linkedin.com/company/dv-gr-enterprises-dba-wingstop", "https://www.linkedin.com/company/high-plains-brew-llc", "https://www.linkedin.com/company/motley7brew", "https://www.linkedin.com/company/dutchbroscoffee", "https://www.linkedin.com/company/7-brew-piedmont-beverage-company", "https://www.linkedin.com/company/brew-crew-holdings", "https://www.linkedin.com/company/broadridge-financial-solutions-india-private-ltd", "https://www.linkedin.com/company/state-street", "https://www.linkedin.com/company/broadbridgeassociates", "https://www.linkedin.com/company/rpm-technologies", "https://www.linkedin.com/company/ltxtrading", "https://www.linkedin.com/company/u-s--venture-inc-", "https://www.linkedin.com/company/schneider", "https://www.linkedin.com/company/kbx-global", "https://www.linkedin.com/company/igenfuels-llc", "https://www.linkedin.com/company/u-s-energy-stayahead", "https://www.linkedin.com/company/paper-transport", "https://www.linkedin.com/company/u.s.-autoforce", "https://www.linkedin.com/company/schreiber-foods", "https://www.linkedin.com/company/formerlysokolis", "https://www.linkedin.com/company/breakthrough-energy", "https://www.linkedin.com/company/green-mountain-power", "https://www.linkedin.com/company/velco", "https://www.linkedin.com/company/vermont-electric-cooperative", "https://www.linkedin.com/company/vermont-gas", "https://www.linkedin.com/company/state-of-vermont", "https://www.linkedin.com/company/encore-renewable-energy", "https://www.linkedin.com/company/veic", "https://www.linkedin.com/company/beta-air-llc", "https://www.linkedin.com/company/efficiency-vermont", "https://www.linkedin.com/company/baylor-scott-white-outpatient-rehabilitation", "https://www.linkedin.com/company/childrenshealth", "https://www.linkedin.com/company/texas-health-resources", "https://www.linkedin.com/company/scottish-rite-for-children", "https://www.linkedin.com/company/jps-health-network", "https://www.linkedin.com/company/cd-peacock-jewelers", "https://www.linkedin.com/company/razny-jewelers", "https://www.linkedin.com/company/burdeens-jewelry-ltd", "https://www.linkedin.com/company/rolex-boutique-luxury-swiss", "https://www.linkedin.com/company/bella-cosa-jewelers", "https://www.linkedin.com/company/ulta", "https://www.linkedin.com/company/tiffany-and-co", "https://www.linkedin.com/company/david-yurman", "https://www.linkedin.com/company/cartier", "https://www.linkedin.com/company/louis-vuitton", "https://www.linkedin.com/company/abridgehq", "https://www.linkedin.com/company/mavenclinic", "https://www.linkedin.com/company/assorthealth", "https://www.linkedin.com/company/grow-therapy", "https://www.linkedin.com/company/nourish", "https://www.linkedin.com/company/charlie-health", "https://www.linkedin.com/company/includedhealth", "https://www.linkedin.com/company/lyra-health", "https://www.linkedin.com/company/tucson-medical-center", "https://www.linkedin.com/company/northwesthealthcareaz", "https://www.linkedin.com/company/tmc-health", "https://www.linkedin.com/company/pima-county", "https://www.linkedin.com/company/pimaheartandvascular", "https://www.linkedin.com/company/data-tactics-corporation", "https://www.linkedin.com/company/nyulangonehealth", "https://www.linkedin.com/company/mountsinainyc", "https://www.linkedin.com/company/new-york-presbyterian-hospital", "https://www.linkedin.com/company/nyc-health-and-hospitals-corporation", "https://www.linkedin.com/company/stony-brook-medicine", "https://www.linkedin.com/company/memorial-sloan-kettering-cancer-center", "https://www.linkedin.com/company/weillcornellmedicine", "https://www.linkedin.com/company/hospital-for-special-surgery", "https://www.linkedin.com/company/montefiore-health-system", "https://www.linkedin.com/company/discover", "https://www.linkedin.com/company/bank-of-america", "https://www.linkedin.com/company/velocityapp", "https://www.linkedin.com/company/chi-health", "https://www.linkedin.com/company/nebraskamed", "https://www.linkedin.com/company/nebraska-methodist-health-system", "https://www.linkedin.com/company/houston-methodist", "https://www.linkedin.com/company/st-luke's-health", "https://www.linkedin.com/company/st-joseph-health-system", "https://www.linkedin.com/company/chistalexiushealth", "https://www.linkedin.com/company/caesarssportsbookandcasino", "https://www.linkedin.com/company/draftkings-inc-", "https://www.linkedin.com/company/betmgm", "https://www.linkedin.com/company/the-venetian", "https://www.linkedin.com/company/fanduel", "https://www.linkedin.com/company/fontainebleau-las-vegas", "https://www.linkedin.com/company/wynnresorts", "https://www.linkedin.com/company/hardrockdigital", "https://www.linkedin.com/company/resortsworldlv", "https://www.linkedin.com/company/isle-of-capri-casino", "https://www.linkedin.com/company/eldorado-resorts-inc-", "https://www.linkedin.com/company/eldorado-hotel-casino", "https://www.linkedin.com/company/silver-legacy-resort-casino", "https://www.linkedin.com/company/circus-circus-reno", "https://www.linkedin.com/company/scioto-downs", "https://www.linkedin.com/company/royal-caribbean-bakery", "https://www.linkedin.com/company/caribbean-food-delights", "https://www.linkedin.com/company/careersinfood-com", "https://www.linkedin.com/company/chobani", "https://www.linkedin.com/company/pim-brands", "https://www.linkedin.com/company/bimbo-bakeries-usa", "https://www.linkedin.com/company/tyson-foods", "https://www.linkedin.com/company/conagra-brands", "https://www.linkedin.com/company/lakeside-foods", "https://www.linkedin.com/company/lincolnpropertycompany", "https://www.linkedin.com/company/simon-property-group", "https://www.linkedin.com/company/macerich", "https://www.linkedin.com/company/kimco-realty-corporation", "https://www.linkedin.com/company/spinoso-real-estate-group", "https://www.linkedin.com/company/centennialau", "https://www.linkedin.com/company/brookfieldproperties", "https://www.linkedin.com/company/centercal-properties-llc", "https://www.linkedin.com/company/brixmor", "https://www.linkedin.com/company/regency-centers", "https://www.linkedin.com/company/osfinnovation", "https://www.linkedin.com/company/springfield-clinic", "https://www.linkedin.com/company/bromenn-healthcare", "https://www.linkedin.com/company/rush-university-medical-center", "https://www.linkedin.com/company/memorial-health-il", "https://www.linkedin.com/company/healthalliance", "https://www.linkedin.com/company/northwestern-medicine", "https://www.linkedin.com/company/endeavor-health", "https://www.linkedin.com/company/central-maine-healthcare", "https://www.linkedin.com/company/mainehealth", "https://www.linkedin.com/company/central-maine-healthcare-careers", "https://www.linkedin.com/company/prime-healthcare", "https://www.linkedin.com/company/bridgton-hospital", "https://www.linkedin.com/company/northernlightheasternmainemedicalcenter", "https://www.linkedin.com/company/martinspointhealthcare", "https://www.linkedin.com/company/stmarysmaine", "https://www.linkedin.com/company/maine-medical-center", "https://www.linkedin.com/company/channel-maven", "https://www.linkedin.com/company/seatmatchinc", "https://www.linkedin.com/company/achieve-unite", "https://www.linkedin.com/company/familyofficegp", "https://www.linkedin.com/company/black-diamond-coatings-inc", "https://www.linkedin.com/company/arco-murray-construction-company", "https://www.linkedin.com/company/alpha-chi-omega-fraternity-inc.", "https://www.linkedin.com/company/talentharbor", "https://www.linkedin.com/company/primroseschools", "https://www.linkedin.com/company/advertising-week", "https://www.linkedin.com/company/capgemini", "https://www.linkedin.com/company/cognizant", "https://www.linkedin.com/company/infosys", "https://www.linkedin.com/company/cgi-business-consulting", "https://www.linkedin.com/company/cgi-in-nederland", "https://www.linkedin.com/company/cgi-danmark", "https://www.linkedin.com/company/chamberlain-group-m%C3%A9xico", "https://www.linkedin.com/company/wyzelabs", "https://www.linkedin.com/company/r-systems", "https://www.linkedin.com/company/molex", "https://www.linkedin.com/company/composites-one", "https://www.linkedin.com/company/medlineinc", "https://www.linkedin.com/company/bd-nogales-sur", "https://www.linkedin.com/company/toyota-north-america", "https://www.linkedin.com/company/systems-llc", "https://www.linkedin.com/company/controlled-products-systems-group", "https://www.linkedin.com/company/city-of-chicago", "https://www.linkedin.com/company/cook-county-government", "https://www.linkedin.com/company/chicago-transit-authority", "https://www.linkedin.com/company/citycollegeschicago", "https://www.linkedin.com/company/chicagoparks", "https://www.linkedin.com/company/state-of-illinois", "https://www.linkedin.com/company/chicago-housing-authority", "https://www.linkedin.com/company/obama-foundation", "https://www.linkedin.com/company/metra", "https://www.linkedin.com/company/illinois-department-of-human-service-bureau-of-recruitment-and-selection", "https://www.linkedin.com/company/air-charter-service", "https://www.linkedin.com/company/avia-solutions-group", "https://www.linkedin.com/company/air-partner", "https://www.linkedin.com/company/chapman-freeborn-obc", "https://www.linkedin.com/company/vistajet-international", "https://www.linkedin.com/company/magma-aviation-limited", "https://www.linkedin.com/company/jet-aviation", "https://www.linkedin.com/company/execujet-aviation-group", "https://www.linkedin.com/company/jetex", "https://www.linkedin.com/company/lunajets-s-a-", "https://www.linkedin.com/company/aurora-health-care", "https://www.linkedin.com/company/uw-health", "https://www.linkedin.com/company/advocate-aurora-health", "https://www.linkedin.com/company/state-of-wisconsin", "https://www.linkedin.com/company/froedtert-hospital", "https://www.linkedin.com/company/northwestern-mutual", "https://www.linkedin.com/company/thedacare", "https://www.linkedin.com/company/advocate-health", "https://www.linkedin.com/company/trihealth", "https://www.linkedin.com/company/the-christ-hospital", "https://www.linkedin.com/company/nationwide-childrens-hospital", "https://www.linkedin.com/company/oaacd", "https://www.linkedin.com/company/daytonchildrens", "https://www.linkedin.com/company/st--elizabeth-healthcare", "https://www.linkedin.com/company/ketteringhealth", "https://www.linkedin.com/company/boys-town", "https://www.linkedin.com/company/ortho-nebraska", "https://www.linkedin.com/company/bryan-health", "https://www.linkedin.com/company/omaha-public-power-district", "https://www.linkedin.com/company/city-of-omaha", "https://www.linkedin.com/company/mutual-of-omaha", "https://www.linkedin.com/company/hilton", "https://www.linkedin.com/company/wyndhamhotels", "https://www.linkedin.com/company/ihghotels&resorts", "https://www.linkedin.com/company/hyatt", "https://www.linkedin.com/company/best-western-hotels-&-resorts", "https://www.linkedin.com/company/four-seasons-hotels-and-resorts", "https://www.linkedin.com/company/sonesta-hotels", "https://www.linkedin.com/company/aimbridge-hospitality", "https://www.linkedin.com/company/accor", "https://www.linkedin.com/company/quality-inn", "https://www.linkedin.com/company/woodspring-suites", "https://www.linkedin.com/company/sleepinn", "https://www.linkedin.com/company/rodewayinn", "https://www.linkedin.com/company/clarion-pointe-hotels", "https://www.linkedin.com/company/comfort-hotels", "https://www.linkedin.com/company/clarionhotels", "https://www.linkedin.com/company/everhome-suites", "https://www.linkedin.com/company/suburban-extended-stay-hotels", "https://www.linkedin.com/company/momentfactory", "https://www.linkedin.com/company/evenko", "https://www.linkedin.com/company/dragone", "https://www.linkedin.com/company/feld-entertainment", "https://www.linkedin.com/company/groupe-ch", "https://www.linkedin.com/company/tait-towers", "https://www.linkedin.com/company/c2mtl", "https://www.linkedin.com/company/laperlebydragone", "https://www.linkedin.com/company/axs-uk", "https://www.linkedin.com/company/chicago-family-health-center", "https://www.linkedin.com/company/access-community-health-network", "https://www.linkedin.com/company/metropolitan-family-services", "https://www.linkedin.com/company/friend-family-health-center", "https://www.linkedin.com/company/tca-health-inc--nfp", "https://www.linkedin.com/company/ann-and-robert-h-lurie-children's-hospital-of-chicago", "https://www.linkedin.com/company/erie-family-health-centers", "https://www.linkedin.com/company/hrdi", "https://www.linkedin.com/company/university-of-chicago-medicine", "https://www.linkedin.com/company/clairhealth", "https://www.linkedin.com/company/tembo-inc", "https://www.linkedin.com/company/usevesta", "https://www.linkedin.com/company/catenalabs", "https://www.linkedin.com/company/trykeep", "https://www.linkedin.com/company/superblockshq", "https://www.linkedin.com/company/tryretool", "https://www.linkedin.com/company/optura-ai", "https://www.linkedin.com/company/getcartwheel", "https://www.linkedin.com/company/flex-super-app", "https://www.linkedin.com/company/nozomi-networks-sa", "https://www.linkedin.com/company/armis-security", "https://www.linkedin.com/company/cyera", "https://www.linkedin.com/company/dragos-inc.", "https://www.linkedin.com/company/clarotyhealthcare", "https://www.linkedin.com/company/upwindsecurity", "https://www.linkedin.com/company/torqio", "https://www.linkedin.com/company/wizsecurity", "https://www.linkedin.com/company/island-io", "https://www.linkedin.com/company/cintel", "https://www.linkedin.com/company/cintel-ict-research-and-development-center", "https://www.linkedin.com/company/integration-innovation-inc-", "https://www.linkedin.com/company/cintal-inc-", "https://www.linkedin.com/company/peopletec", "https://www.linkedin.com/company/5-stones-research-corp", "https://www.linkedin.com/company/syntel", "https://www.linkedin.com/company/cintel-strategies-inc-", "https://www.linkedin.com/company/avionsolutions", "https://www.linkedin.com/company/ripple", "https://www.linkedin.com/company/krakenfx", "https://www.linkedin.com/company/circleco", "https://www.linkedin.com/company/binance", "https://www.linkedin.com/company/tether", "https://www.linkedin.com/company/stackadapt", "https://www.linkedin.com/company/cityburlington", "https://www.linkedin.com/company/uvmhealth-university-of-vermont-medical-center", "https://www.linkedin.com/company/state-of-nh", "https://www.linkedin.com/company/city-of-hamilton", "https://www.linkedin.com/company/vermontpublic", "https://www.linkedin.com/company/vtdigger", "https://www.linkedin.com/company/cleartaxofficial", "https://www.linkedin.com/company/delta-air-lines", "https://www.linkedin.com/company/jetblue", "https://www.linkedin.com/company/ceia-s-p-a-", "https://www.linkedin.com/company/ceia-international", "https://www.linkedin.com/company/garrett-metal-detectors", "https://www.linkedin.com/company/ceia-pacific", "https://www.linkedin.com/company/smiths-detection", "https://www.linkedin.com/company/evolv-technology", "https://www.linkedin.com/company/ceiauk", "https://www.linkedin.com/company/rapiscan-systems", "https://www.linkedin.com/company/ceia-pharmaceutical-metal-detector-systems", "https://www.linkedin.com/company/surescancorp", "https://www.linkedin.com/company/riverside-health", "https://www.linkedin.com/company/chesapeake-regional-medical-center", "https://www.linkedin.com/company/city-of-virginia-beach", "https://www.linkedin.com/company/vcu-health-system", "https://www.linkedin.com/company/city-of-norfolk", "https://www.linkedin.com/company/lifenet", "https://www.linkedin.com/company/clearfoundation", "https://www.linkedin.com/company/clearcellular", "https://www.linkedin.com/company/clearunited", "https://www.linkedin.com/company/clearholdings", "https://www.linkedin.com/company/clearcenter", "https://www.linkedin.com/company/digital-world-earth", "https://www.linkedin.com/company/cloudmersive", "https://www.linkedin.com/company/enzo-health", "https://www.linkedin.com/company/vasion-software", "https://www.linkedin.com/company/awardco", "https://www.linkedin.com/company/carepayment", "https://www.linkedin.com/company/clear-balance", "https://www.linkedin.com/company/accessone", "https://www.linkedin.com/company/janus-health", "https://www.linkedin.com/company/revspring", "https://www.linkedin.com/company/finthrive", "https://www.linkedin.com/company/ablepay-health", "https://www.linkedin.com/company/revenue-enterprises-llc", "https://www.linkedin.com/company/aspirion-health-resources-llc", "https://www.linkedin.com/company/med-metrix", "https://www.linkedin.com/company/cryptocom", "https://www.linkedin.com/company/okxofficial", "https://www.linkedin.com/company/revolut", "https://www.linkedin.com/company/bybitexchange", "https://www.linkedin.com/company/legal-aid-society-of-the-orange-county-bar-association", "https://www.linkedin.com/company/florida-legal-services", "https://www.linkedin.com/company/florida-rural-legal-services", "https://www.linkedin.com/company/bay-area-legal", "https://www.linkedin.com/company/the-florida-bar", "https://www.linkedin.com/company/legal-aid-society-of-palm-beach-county", "https://www.linkedin.com/company/aclu-of-florida", "https://www.linkedin.com/company/clsphila", "https://www.linkedin.com/company/national-legal-aid-&-defender-association_2", "https://www.linkedin.com/company/akerman", "https://www.linkedin.com/company/verizon", "https://www.linkedin.com/company/att", "https://www.linkedin.com/company/t-mobile", "https://www.linkedin.com/company/comcast-business", "https://www.linkedin.com/company/nbcuniversal-inc-", "https://www.linkedin.com/company/xfinity", "https://www.linkedin.com/company/freewheel", "https://www.linkedin.com/company/comcast-advertising", "https://www.linkedin.com/company/comcast-technology-solutions", "https://www.linkedin.com/company/effectv", "https://www.linkedin.com/company/comcast-spectacor", "https://www.linkedin.com/company/machineq-iot", "https://www.linkedin.com/company/comcast-smart-solutions", "https://www.linkedin.com/company/louisville-metro-government", "https://www.linkedin.com/company/kychfs", "https://www.linkedin.com/company/university-of-kentucky-healthcare", "https://www.linkedin.com/company/norton-healthcare", "https://www.linkedin.com/company/sazerac", "https://www.linkedin.com/company/kentucky-department-for-medicaid-services", "https://www.linkedin.com/company/commonwealth-of-kentucky-office-of-technology", "https://www.linkedin.com/company/cedkygov", "https://www.linkedin.com/company/kentucky-department-of-juvenile-justice", "https://www.linkedin.com/company/ky-career-center", "https://www.linkedin.com/company/kentucky-education-and-labor-cabinet", "https://www.linkedin.com/company/kentucky-tourism-arts-heritage-cabinet", "https://www.linkedin.com/company/kentucky-historical-society", "https://www.linkedin.com/company/kyhorsepark", "https://www.linkedin.com/company/kentucky-finance-and-administration-cabinet", "https://www.linkedin.com/company/fish-&-wildlife-resources-kentucky-department-of", "https://www.linkedin.com/company/kentucky-heritage-council", "https://www.linkedin.com/company/kentucky-arts-council", "https://www.linkedin.com/company/kyhighwaysafety", "https://www.linkedin.com/company/sutter-health", "https://www.linkedin.com/company/intermountain-health", "https://www.linkedin.com/company/uchealth", "https://www.linkedin.com/company/virginiamasonfranciscanhealth", "https://www.linkedin.com/company/livanta-llc", "https://www.linkedin.com/company/commence-careers", "https://www.linkedin.com/company/commenceai", "https://www.linkedin.com/company/pleasant-land", "https://www.linkedin.com/company/communitycare", "https://www.linkedin.com/company/oneok", "https://www.linkedin.com/company/inceed", "https://www.linkedin.com/company/saint-francis-health-system", "https://www.linkedin.com/company/crsoktulsa", "https://www.linkedin.com/company/oklahoma-state-university-medical-center", "https://www.linkedin.com/company/family-children-s-services", "https://www.linkedin.com/company/rogers-behavioral-health", "https://www.linkedin.com/company/skyway-behavioral-health", "https://www.linkedin.com/company/thresholds", "https://www.linkedin.com/company/clarityclinic", "https://www.linkedin.com/company/lifestance-health", "https://www.linkedin.com/company/trilogy-behavioral-healthcare", "https://www.linkedin.com/company/elliementalhealth", "https://www.linkedin.com/company/serhant", "https://www.linkedin.com/company/zillow", "https://www.linkedin.com/company/anywhere-real-estate-inc", "https://www.linkedin.com/company/sothebysrealty", "https://www.linkedin.com/company/the-corcoran-group", "https://www.linkedin.com/company/compass-international-holdings", "https://www.linkedin.com/company/keller-williams-realty-llc", "https://www.linkedin.com/company/redfin", "https://www.linkedin.com/company/prudential-california-real-estate", "https://www.linkedin.com/company/grc-engineering-club", "https://www.linkedin.com/company/nrlabs", "https://www.linkedin.com/company/aquiainc", "https://www.linkedin.com/company/vanta-security", "https://www.linkedin.com/company/venture-guides", "https://www.linkedin.com/company/bytechek", "https://www.linkedin.com/company/claritysecurity", "https://www.linkedin.com/company/comply-org", "https://www.linkedin.com/company/360advanced", "https://www.linkedin.com/company/parkland-hospital", "https://www.linkedin.com/company/christus-muguerza", "https://www.linkedin.com/company/ucchristus", "https://www.linkedin.com/company/christus-sinergia-salud", "https://www.linkedin.com/company/christus-trinity-mother-frances-health-system", "https://www.linkedin.com/company/christus-spohn-health-system", "https://www.linkedin.com/company/christus-st-vincent", "https://www.linkedin.com/company/christusstmichael", "https://www.linkedin.com/company/christus-st-frances-cabrini", "https://www.linkedin.com/company/christus-southeast-texas", "https://www.linkedin.com/company/rexifinance", "https://www.linkedin.com/company/felix-pago", "https://www.linkedin.com/company/majorityofficial", "https://www.linkedin.com/company/nubank", "https://www.linkedin.com/company/brexhq", "https://www.linkedin.com/company/seis-card", "https://www.linkedin.com/company/mybambu", "https://www.linkedin.com/company/confido-health", "https://www.linkedin.com/company/novig", "https://www.linkedin.com/company/snorkel-ai", "https://www.linkedin.com/company/tryprofound", "https://www.linkedin.com/company/eliseai", "https://www.linkedin.com/company/andohq", "https://www.linkedin.com/company/firecrawl", "https://www.linkedin.com/company/corridor-advisors", "https://www.linkedin.com/company/rogoai", "https://www.linkedin.com/company/4seasons-air-conditioning", "https://www.linkedin.com/company/4-seasons-air-conditioning-heating-inc", "https://www.linkedin.com/company/john's-island-club", "https://www.linkedin.com/company/grandharborclub", "https://www.linkedin.com/company/quail-valley-golf-club", "https://www.linkedin.com/company/cityofpalmbayfl", "https://www.linkedin.com/company/brevard-county-government", "https://www.linkedin.com/company/city-of-melbourne_2", "https://www.linkedin.com/company/orchid-island-golf-and-beach-club", "https://www.linkedin.com/company/colliers", "https://www.linkedin.com/company/mg2-corporation", "https://www.linkedin.com/company/hdr", "https://www.linkedin.com/company/aecom", "https://www.linkedin.com/company/maser-consulting", "https://www.linkedin.com/company/cbre", "https://www.linkedin.com/company/cushman-&-wakefield", "https://www.linkedin.com/company/stantec", "https://www.linkedin.com/company/kimley-horn", "https://www.linkedin.com/company/ramos-cs", "https://www.linkedin.com/company/davidsonhospitality", "https://www.linkedin.com/company/remington-hospitality", "https://www.linkedin.com/company/pyramid-global-hospitality", "https://www.linkedin.com/company/highgate", "https://www.linkedin.com/company/schulte-hospitality-group", "https://www.linkedin.com/company/hallparkhotel", "https://www.linkedin.com/company/hersha-hospitality", "https://www.linkedin.com/company/crescent-hotels-&-resorts", "https://www.linkedin.com/company/atrium-hospitality", "https://www.linkedin.com/company/colcord-hotel", "https://www.linkedin.com/company/ambassador-hotel-tulsa", "https://www.linkedin.com/company/greystar", "https://www.linkedin.com/company/bellpartnersinc", "https://www.linkedin.com/company/fpamultifamily", "https://www.linkedin.com/company/fairfield-residential", "https://www.linkedin.com/company/morgan-properties", "https://www.linkedin.com/company/mid-america-apartment-communities", "https://www.linkedin.com/company/asset-living", "https://www.linkedin.com/company/harborgroupinternational", "https://www.linkedin.com/company/willow-bridge-pc", "https://www.linkedin.com/company/basf", "https://www.linkedin.com/company/evonik", "https://www.linkedin.com/company/clariant", "https://www.linkedin.com/company/givaudan", "https://www.linkedin.com/company/ashland-inc", "https://www.linkedin.com/company/dow-chemical", "https://www.linkedin.com/company/dsm-firmenich", "https://www.linkedin.com/company/iff", "https://www.linkedin.com/company/solvay", "https://www.linkedin.com/company/brenntag", "https://www.linkedin.com/company/first-credit-services", "https://www.linkedin.com/company/us-bank", "https://www.linkedin.com/company/jobot", "https://www.linkedin.com/company/insight-global", "https://www.linkedin.com/company/robert-half-international", "https://www.linkedin.com/company/cyber-coders", "https://www.linkedin.com/company/kforce", "https://www.linkedin.com/company/apex-systems", "https://www.linkedin.com/company/everforth", "https://www.linkedin.com/company/medical-city-healthcare", "https://www.linkedin.com/company/nestle-s-a-", "https://www.linkedin.com/company/mondelezinternational", "https://www.linkedin.com/company/the-coca-cola-company", "https://www.linkedin.com/company/mars", "https://www.linkedin.com/company/ferrero", "https://www.linkedin.com/company/centrale-laitiere", "https://www.linkedin.com/company/danone-aqua", "https://www.linkedin.com/company/nutricia-", "https://www.linkedin.com/company/danonedjurdjuraalg%C3%A9rie", "https://www.linkedin.com/company/danone-egypt", "https://www.linkedin.com/company/danoneresearch", "https://www.linkedin.com/company/alpro", "https://www.linkedin.com/company/d%C3%A9lice-danone", "https://www.linkedin.com/company/fanmilk", "https://www.linkedin.com/company/salus-uruguay", "https://www.linkedin.com/company/kate-farms-inc-", "https://www.linkedin.com/company/harmless-harvest", "https://www.linkedin.com/company/pt-sari-husada", "https://www.linkedin.com/company/evian-resort", "https://www.linkedin.com/company/evianwater", "https://www.linkedin.com/company/bledina", "https://www.linkedin.com/company/yooji", "https://www.linkedin.com/company/happyfamilyorganics", "https://www.linkedin.com/company/danone-r%C3%A9union", "https://www.linkedin.com/company/zywiec-zdroj", "https://www.linkedin.com/company/les-pr%C3%A9s-rient-bio", "https://www.linkedin.com/company/the-akkermansia-company", "https://www.linkedin.com/company/bestcareargentina", "https://www.linkedin.com/company/danone-communities", "https://www.linkedin.com/company/yocream-international-inc.", "https://www.linkedin.com/company/realfoodblends", "https://www.linkedin.com/company/sorgente-b.v.", "https://www.linkedin.com/company/danonevol", "https://www.linkedin.com/company/harrogate-water-brands", "https://www.linkedin.com/company/fundaci%C3%B3n-danone", "https://www.linkedin.com/company/fondazione-istituto-danone", "https://www.linkedin.com/company/functional-formularies", "https://www.linkedin.com/company/aquador-mineral-water-a-s", "https://www.linkedin.com/company/nutricia-mmp", "https://www.linkedin.com/company/font-vella", "https://www.linkedin.com/company/activiadanone", "https://www.linkedin.com/company/bebelac-middle-east", "https://www.linkedin.com/company/cleveland-clinic-abu-dhabi", "https://www.linkedin.com/company/university-hospitals", "https://www.linkedin.com/company/american-heart-association", "https://www.linkedin.com/company/ssmcabudhabi", "https://www.linkedin.com/company/sehahealth", "https://www.linkedin.com/company/burjeel-hospital", "https://www.linkedin.com/company/cleveland-clinic-childrens", "https://www.linkedin.com/company/dark-star-group", "https://www.linkedin.com/company/edgesource", "https://www.linkedin.com/company/quiet-professionals-llc", "https://www.linkedin.com/company/akima", "https://www.linkedin.com/company/trex-solutions", "https://www.linkedin.com/company/freseniusmedicalcare", "https://www.linkedin.com/company/davita-tratamento-renal", "https://www.linkedin.com/company/us-renal-care-inc.", "https://www.linkedin.com/company/davita-ecuador", "https://www.linkedin.com/company/davitainternational", "https://www.linkedin.com/company/nephrolife-care-india-", "https://www.linkedin.com/company/pwc", "https://www.linkedin.com/company/kpmg", "https://www.linkedin.com/company/deloitte-digital", "https://www.linkedin.com/company/highfield-humancapital", "https://www.linkedin.com/company/walt-disney-imagineering", "https://www.linkedin.com/company/disney-entertainment", "https://www.linkedin.com/company/disney-cruise-line", "https://www.linkedin.com/company/warner-bros-discovery", "https://www.linkedin.com/company/the-walt-disney-studios", "https://www.linkedin.com/company/disneyland-resort", "https://www.linkedin.com/company/universal-orlando-resort", "https://www.linkedin.com/company/american-airlines", "https://www.linkedin.com/company/southwest-airlines", "https://www.linkedin.com/company/dallas-love-field", "https://www.linkedin.com/company/city-of-dallas", "https://www.linkedin.com/company/dallas-area-rapid-transit", "https://www.linkedin.com/company/city-of-fort-worth", "https://www.linkedin.com/company/zemitek", "https://www.linkedin.com/company/chemonics-international", "https://www.linkedin.com/company/dai", "https://www.linkedin.com/company/fhi-360", "https://www.linkedin.com/company/dos-leap-global", "https://www.linkedin.com/company/dt-global", "https://www.linkedin.com/company/dexisimaging", "https://www.linkedin.com/company/rti-international", "https://www.linkedin.com/company/palladium-positive-impact", "https://www.linkedin.com/company/creative-associates-international-inc-", "https://www.linkedin.com/company/doma-tecnologia-em-equipamentos-industriais", "https://www.linkedin.com/company/doma-technology-llc", "https://www.linkedin.com/company/domahq", "https://www.linkedin.com/company/ligaautomacaoindustrial", "https://www.linkedin.com/company/ipconfigure", "https://www.linkedin.com/company/comaginehealth", "https://www.linkedin.com/company/crownlifttrucks", "https://www.linkedin.com/company/careersatcrown", "https://www.linkedin.com/company/crownlifttrucks-brasil", "https://www.linkedin.com/company/toyota-material-handling", "https://www.linkedin.com/company/hyster-yale-group", "https://www.linkedin.com/company/crownequipmentaustralia", "https://www.linkedin.com/company/the-raymond-corporation", "https://www.linkedin.com/company/crown-holdings-inc-", "https://www.linkedin.com/company/jungheinrich-ag", "https://www.linkedin.com/company/crown-gabelstapler-gmbh-&-co-kg", "https://www.linkedin.com/company/rehmann" ] } ``` ## Output: one row per company 30 fields in 8 groups. ### Company - `url`: LinkedIn page. The company's LinkedIn page. - `universal_name`: Page name. The company's name in its LinkedIn URL (linkedin.com/company/). - `company_id`: Company ID. LinkedIn's numeric company ID. - `tagline`: Tagline. The company's tagline, under its name. - `logo`: Logo. Logo image URL. - `cover_image`: Cover image. Cover image URL. ### About - `description`: Description. The company's About text. - `website`: Website. The company's website. - `industry`: Industry. Industry, such as "Software Development". - `company_size`: Company size. Size band, such as "1,001-5,000 employees". - `company_type`: Type. Such as "Public Company", "Privately Held" or "Nonprofit". - `founded_year`: Founded. Year the company was founded. - `specialties`: Specialties. The company's specialties. - `phone`: Phone. Phone number, when the company shows one. ### Employees and followers - `employees_count`: Employees on LinkedIn. Number of employees with a LinkedIn profile at the company. - `followers_count`: Followers. Followers of the company's LinkedIn page. ### Headquarters - `headquarters`: Headquarters. Headquarters city and region. - `hq_street`: HQ street. Headquarters street address. - `hq_locality`: HQ city. Headquarters city. - `hq_region`: HQ region. Headquarters state or region. - `hq_postal_code`: HQ postal code. Headquarters postal code. - `hq_country`: HQ country. Headquarters two-letter country code. ### Office locations - `locations`: Locations. Office addresses the company lists: address, lines, label ("Primary"), is_primary and a maps query. ### Related pages - `affiliated_pages`: Affiliated pages. Affiliated companies: name, url, industry, location and logo. - `showcase_pages`: Showcase pages. The company's showcase pages: name, url, industry, location and logo. - `similar_pages`: Similar pages. Companies LinkedIn shows as similar: name, url, industry, location and logo. ### Products - `products`: Products. Products listed on the page: name, category, description and url. ### Search details - `input`: Input. The URL, page name or ID you gave for this company. - `scraping_time`: Scraped at. When the company was scraped (UTC, ISO 8601). ## How it works 1. Paste your companies. Company names, LinkedIn page links or LinkedIn company IDs, one per line. 2. Each page is read. About, headquarters, offices, employee and follower counts, products and similar companies. 3. Download your list. As a spreadsheet, in Google Sheets, or into your CRM to fill in missing company fields. ## Use cases - Filling in your CRM: Website, industry, size and headquarters for the companies already in your CRM, taken from their LinkedIn pages. - Sorting target accounts: Size and industry for a list of target accounts, to rank them by fit before anyone reaches out. - Mapping a market: Every company in a list with its offices and employee count, to compare competitors or size up a sector. - Researching partners and investments: Founded year, specialties and similar companies for the businesses you’re looking at. ## Good to know It reads public company pages only, with no people data. Employee counts are LinkedIn’s own figures, so they can differ from a company’s real headcount. ## Questions ### Is it legal to scrape LinkedIn company pages? This scraper collects only company pages that LinkedIn shows publicly to visitors who are not logged in. Company pages are business information, but check that your use follows the laws that apply to you. If you are unsure, ask a lawyer. ### Do I need a LinkedIn account? No. You don't need a LinkedIn account, a login or cookies, and the scraper never uses yours. ### Can I use a LinkedIn company ID? Yes, but only for companies with at least one open job on LinkedIn: the scraper finds the company's page through its jobs. For other companies, use the company URL or page name. ### What happens when a run fails? The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 full details) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both. ## Run it - In Apify Console: https://apify.com/keklik/linkedin-company-scraper - With the Apify API: POST https://api.apify.com/v2/acts/keklik~linkedin-company-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN with the input JSON as the body. It returns the rows. - From an AI agent: connect the Apify MCP server (https://mcp.apify.com), add the Actor `keklik/linkedin-company-scraper` and call it with the input. --- # Keklik pricing > You pay Apify per result. Apify's platform costs are included in each price, and each paid Apify plan lowers the price per result. There is no subscription with Keklik. ## Apify's plans (checked 10 November 2026, see https://apify.com/pricing) | Plan | Per month | Usage included each month | Store discount | |---|---:|---:|---| | Free | $0 | $5 | none | | Starter | $19 | $19 | Bronze | | Scale | $199 | $199 | Silver | | Business | $999 | $999 | Gold | A paid plan's fee is spent on usage first, and usage above it goes on the next invoice. The Free plan stops runs once its $5 is used, until the next month. Annual billing takes 10% off. Students get 50% off paid plans, startups 30% off Scale, nonprofits a discount set case by case. ## Price per 1,000 results, by scraper ### [Google Maps Reviews Scraper](https://keklik.io/scrapers/google-maps-reviews-scraper.md) | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Review | $0.45 | $0.35 | $0.30 | $0.22 | | Original date of an edited review (add-on) | $0.40 | $0.35 | $0.30 | $0.25 | ### [LinkedIn Jobs Scraper](https://keklik.io/scrapers/linkedin-jobs-scraper.md) | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Job | $0.25 | $0.22 | $0.20 | $0.17 | | Full job details (add-on) | $0.13 | $0.12 | $0.10 | $0.09 | | Company details (add-on) | $0.50 | $0.45 | $0.40 | $0.35 | ### [Rightmove Estate Agents Scraper](https://keklik.io/scrapers/rightmove-agents-scraper.md) | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Agent branch | $0.75 | $0.70 | $0.60 | $0.50 | | Full branch details (add-on) | $0.75 | $0.70 | $0.60 | $0.50 | ### [Rightmove Property Scraper](https://keklik.io/scrapers/rightmove-scraper.md) | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Property listing | $0.75 | $0.70 | $0.60 | $0.50 | | Full property details (add-on) | $0.75 | $0.70 | $0.60 | $0.50 | | Agent profile (add-on) | $0.75 | $0.70 | $0.60 | $0.50 | ### [Instagram Reels Scraper](https://keklik.io/scrapers/instagram-reels-scraper.md) | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Reel | $1.00 | $0.90 | $0.80 | $0.70 | | Comment (add-on) | $1.00 | $0.90 | $0.80 | $0.70 | ### [Instagram Profile Scraper](https://keklik.io/scrapers/instagram-profile-scraper.md) | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Profile | $1.00 | $0.90 | $0.80 | $0.70 | | Post (add-on) | $1.00 | $0.90 | $0.80 | $0.70 | | Reel (add-on) | $1.00 | $0.90 | $0.80 | $0.70 | | Retried blocked profile (add-on) | $1.50 | $1.50 | $1.50 | $1.50 | ### [Instagram Post Scraper](https://keklik.io/scrapers/instagram-post-scraper.md) | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Post | $1.00 | $0.90 | $0.80 | $0.70 | | Comment (add-on) | $1.00 | $0.90 | $0.80 | $0.70 | ### [Google Maps Leads Scraper](https://keklik.io/scrapers/google-maps-leads-scraper.md) | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Place | $3.00 | $2.25 | $1.50 | $1.10 | | Place details (add-on) | $1.50 | $1.50 | $1.10 | $0.80 | | Emails and social profiles (add-on) | $1.50 | $1.50 | $1.10 | $0.80 | | Review (add-on) | $0.40 | $0.35 | $0.28 | $0.20 | | Images (add-on) | $1.50 | $1.00 | $0.75 | $0.55 | ### [Instagram Comments Scraper](https://keklik.io/scrapers/instagram-comments-scraper.md) | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Comment | $1.00 | $0.90 | $0.80 | $0.70 | ### [Zillow Property Listings Scraper](https://keklik.io/scrapers/zillow-property-listings-scraper.md) | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Listing | $1.00 | $0.90 | $0.80 | $0.70 | | Property details (add-on) | $1.50 | $1.35 | $1.20 | $1.00 | ### [LinkedIn Company Scraper](https://keklik.io/scrapers/linkedin-company-scraper.md) | Charge | Free | Starter | Scale | Business | |---|---:|---:|---:|---:| | Company | $2.50 | $2.20 | $1.90 | $1.40 | Calculator: https://keklik.io/pricing