Icon

Google Search Results Scraper

By asermnasr

SCRAPESEO

descriptionDescription

Extracts structured data from Google search results including titles, URLs, snippets, site links, and metadata based on a custom search query.

data_objectVariables

querystring

self hosted browser automation

settingsBehavior & Action Config

Wait Time (ms)0
Rotate UAfalse
Rotate Proxiesfalse
Rotate Viewportfalse
Human Typingfalse
Shadow DOMtrue
Disable Recordingfalse
Stateless Execfalse

Stealth Features

fatigue
allowTypos
deadClicks
overscroll
idleMovements
naturalTyping

account_treeAutomation Steps

No explicit actions defined in configuration.

outputExpected Output

TitleurlDescriptiondisplayedUrlEmphasized keywordssiteLinksDateproductInfoTypeposition
free, self-hosted browser automation built on Playwright
https://www.reddit.com/r/selfhosted/comments/1py00xh/doppelg%C3%A4nger_free_selfhosted_browser_automation/
It's a self-hosted, open-source tool on top of Playwright that lets you build scraping workflows locally. No per-run costs, no data leaving your ...Read more
20+ comments · 1 month ago
self-hosted, open-source tool on top of Playwright
free, self-hosted browser automation built on PlaywrightReddit · r/selfhosted20+ comments · 1 month ago | 5 best open-source/self-hosted automation tools - Reddit | Best Open Source Autonomous Web Browser AI Agents ... | More results from www.reddit.com
5 best open-source/self-hosted automation tools - Reddit
Organic
2
Best Free Open Source Browser Automation Tools in 2025
https://www.skyvern.com/blog/best-free-open-source-browser-automation-tools-in-2025/
Sep 8, 2025 — Skyvern automates browser-based workflows using LLMs and computer vision, providing a simple API endpoint to fully automate manual workflows ...Read more
https://www.skyvern.com › blog › best-free-open-sourc...
Skyvern automates browser-based workflows
Best Free Open Source Browser Automation Tools in 2025Skyvernhttps://www.skyvern.com › blog › best-free-open-sourc...
Sep 8, 2025 —
Organic
4
Browserless - Browser Automation and Bypass Bot Detectors
https://www.browserless.io/
Bypass any bot detection for your scraping or automations. Sign up for free today, to use our API, proxies and captcha solving.
https://www.browserless.io
Bypass any bot detection for your scraping or automations
Browserless - Browser Automation and Bypass Bot DetectorsBrowserlesshttps://www.browserless.io
Organic
6
angrykoala/awesome-browser-automation
https://github.com/angrykoala/awesome-browser-automation
A curated list of awesome browser automation tools and resources. Browser automation is the act of executing actions automatically in a web browser.Read more
https://github.com › angrykoala › awesome-browser-aut...
awesome browser automation tools and resources
angrykoala/awesome-browser-automationGitHubhttps://github.com › angrykoala › awesome-browser-aut...
Organic
8
Browserbase: A web browser for AI agents & applications
https://www.browserbase.com/
We help AI use the web. Autonomously read, write, and perform tasks on the web with a serverless browser. Try for free. No credit card required. Get a demo.Read more
https://www.browserbase.com
Autonomously read, write, and perform tasks on the web
Browserbase: A web browser for AI agents & applicationsBrowserbasehttps://www.browserbase.com
Organic
10
Top 10 Browser Automation Tools for Web Testing and ...
https://www.firecrawl.dev/blog/browser-automation-tools-comparison-2025
Comprehensive comparison of the best browser automation frameworks including Selenium, Playwright, Puppeteer, and Cypress for web testing, data extraction, ...
https://www.firecrawl.dev › blog › browser-automation...
Selenium, Playwright, Puppeteer, and Cypress
Top 10 Browser Automation Tools for Web Testing and ...Firecrawlhttps://www.firecrawl.dev › blog › browser-automation... | Top Browser Automation Tools... | How to Choose the Right... | Future Trends
Organic
12
Top 10 Self‑Hosted Browser Automation Tools (2026)
https://doppelgangerdev.com/docs/top-10-self-hosted-browser-automation-tools-2026
Jan 25, 2026 — Explore the top 10 self-hosted no-code and low-code browser automation tools in 2026, with detailed strengths, weaknesses, ...
https://doppelgangerdev.com › docs › top-10-self-hoste...
self-hosted no-code and low-code browser automation tools
Top 10 Self‑Hosted Browser Automation Tools (2026)doppelgangerdev.comhttps://doppelgangerdev.com › docs › top-10-self-hoste...
Jan 25, 2026 —
Organic
16
Browser Use - Enable AI to automate the web
https://browser-use.com/
The Way AIuses the web. Agents at scale. Undetectable browsers. Purpose-built models. The API for any website. Get Started Free. Trusted by teams at.Read more
https://browser-use.com
web, browsers
Browser Use - Enable AI to automate the webBrowser Usehttps://browser-use.com
Organic
20

codeExtraction Script

// 1. Parse the raw HTML string into a queryable DOM
const parser = new DOMParser();
const doc = parser.parseFromString($$data.html(), "text/html");

// 2. Initialize results array
const extractedData = [];

// 3. Helper function to clean text (remove extra spaces/newlines)
const cleanText = (text) => (text ? text.replace(/\s+/g, " ").trim() : "");

// 4. Select all search result containers
const results = doc.querySelectorAll(".MjjYud");

results.forEach((result, index) => {
  // --- Extraction Logic ---

  // Title & URL: Found in the main anchor tag
  const anchor = result.querySelector("a[jsname='UWckNb']") || result.querySelector(".yuRUbf a");
  const titleEl = result.querySelector("h3");

  // Skip if we can't find a title or link (filters out "People also ask" or empty fillers)
  if (!anchor || !titleEl) return;

  const title = cleanText(titleEl.textContent);
  const url = anchor.href;

  // Displayed URL: Usually in a <cite> tag
  const displayedUrlEl = result.querySelector("cite");
  const displayedUrl = displayedUrlEl ? cleanText(displayedUrlEl.textContent) : "";

  // Description: Found in the snippet div (often class .VwiC3b or data-sncf="1")
  const descEl = result.querySelector(".VwiC3b, [data-sncf='1']");
  const description = descEl ? cleanText(descEl.textContent) : "";

  // Emphasized Keywords: <em> or <b> tags inside the description
  const keywords = [];
  if (descEl) {
    descEl.querySelectorAll("em, b").forEach((em) => {
      keywords.push(cleanText(em.textContent));
    });
  }
  const emphasizedKeywords = keywords.join(", ");

  // Site Links: Sub-links often found in specific containers like .kb0PBd
  const siteLinkEls = result.querySelectorAll(".kb0PBd a, .St3GK a");
  const siteLinks = Array.from(siteLinkEls)
    .map((link) => cleanText(link.textContent))
    .filter((text) => text && text !== "Read more") // Remove "Read more" noise
    .join(" | ");

  // Date: Look for specific date spans (common classes: .LEwnzc, .r0bn4c, .YrbPuc)
  const dateEl = result.querySelector(".LEwnzc, .r0bn4c, .YrbPuc, .OSrXXb span");
  let date = "";
  if (dateEl) {
    // If the date is inside a complex span, try to isolate the date text
    date = cleanText(dateEl.textContent);
  } else if (description) {
    // Fallback: Check if description starts with a date pattern (e.g., "Sep 8, 2025 — ...")
    const dateMatch = description.match(/^([A-Z][a-z]{2}\s\d{1,2},?\s\d{4})/);
    if (dateMatch) date = dateMatch[0];
  }

  // Product Info: Ratings or store info (rare in this specific HTML but good to have)
  const productInfoEl = result.querySelector(".fG8Fp, .os-seller-name-primary");
  const productInfo = productInfoEl ? cleanText(productInfoEl.textContent) : "";

  // Type: Detect if it's a Video, Ad, or Organic result
  let type = "Organic";
  if (result.querySelector(".WZiv5b") || result.textContent.includes("Videos")) {
    type = "Video";
  }
  if (result.querySelector(".vdQmEd")) {
    type = "Ad";
  }

  // Position: 1-based index
  const position = index + 1;

  // --- Push to Array ---
  extractedData.push({
    Title: title,
    url: url,
    Description: description,
    displayedUrl: displayedUrl,
    "Emphasized keywords": emphasizedKeywords,
    siteLinks: siteLinks,
    Date: date,
    productInfo: productInfo,
    Type: type,
    position: position,
  });
});

// 5. Convert to CSV Format
const headers = [
  "Title",
  "url",
  "Description",
  "displayedUrl",
  "Emphasized keywords",
  "siteLinks",
  "Date",
  "productInfo",
  "Type",
  "position",
];

// Create CSV Header row
const csvRows = [headers.join(",")];

// Create CSV Data rows
extractedData.forEach((row) => {
  const values = headers.map((header) => {
    const value = row[header];
    // Escape double quotes by doubling them (" -> "") and wrap the field in quotes
    const escapedValue = String(value).replace(/"/g, '""');
    return `"${escapedValue}"`;
  });
  csvRows.push(values.join(","));
});

// 6. Return the final CSV string
return csvRows.join("\n");

Preset Details

Time Estimate

5s

Created

2/21/2026

Configuration