Premium scraping APIs get expensive fast. For many n8n/Make flows you can combine HTTP Request, a self-hosted browser (e.g. Browserless), and Cheerio parsing.
Prefer static HTTP when possible; use headless Chrome only when the page needs JS.
Static vs headless
- Static HTML → HTTP Request + parse (fast, cheap).
- JS-rendered SPA → headless Chromium (more RAM).
Parse tables in an n8n Code node
If your n8n instance allows external modules (NODE_FUNCTION_ALLOW_EXTERNAL):
const cheerio = require('cheerio');
const rawHtml = $input.item.json.body;
const $ = cheerio.load(rawHtml);
const extractedLeads = [];
$('table.lead-table tbody tr').each((index, element) => {
const name = $(element).find('td.lead-name').text().trim();
const company = $(element).find('td.lead-company').text().trim();
const contact = $(element).find('td.lead-email').text().trim();
if (name && contact) {
extractedLeads.push({
json: {
lead_name: name,
lead_company: company,
lead_contact: contact,
scraped_at: new Date().toISOString(),
},
});
}
});
return extractedLeads;
Ethics and reliability
- Cache responses; backoff on 429/403.
- Don’t bypass paywalls or auth walls.
- Prefer official APIs when available.
Always respect robots.txt, terms of service, and rate limits.