Actowiz Metrics Real-time
logo
analytics dashboard for brands! Try Free Demo
Navratri Mega Sale Price Tracking

About the Client

Location: Amsterdam, Netherlands

Industry: Market Research / Food & Beverage Analytics

Objective: To build a comprehensive dataset of all restaurants listed on two major Dutch directory sites—iens.nl and eet.nu—capturing:

  • Restaurant name
  • Business e-mail address
  • Total number of reviews
  • City where located

The client required no business to be missed, with results delivered in Excel (.xlsx/.csv) format as quickly as possible.

Actowiz Solutions was engaged because of its experience in directory scraping, data enrichment, and full-scale extraction pipelines.

The Challenges

Navratri Mega Sale Price Tracking

Scraping large directories like iens.nl and Eet.nu involves several complexities:

  • Large Volume & Pagination: Each site lists thousands of restaurants, across multiple pages, filters, and regions. You must crawl all pages without missing any entry.
  • Dynamic Loading & JavaScript: Some content is loaded dynamically (AJAX), requiring headless browsers or script execution to uncover all entries.
  • Email Harvesting Difficulty: Many listings do not directly show email addresses. Some require visiting the restaurant's official site or contact page to extract the address.
  • Data Inconsistencies: Restaurant names, cities, and review counts may be formatted differently across listings, making normalization necessary.
  • Rate Limits & Blocking Risk: Aggressive crawling may trigger defenses or temporary bans. The scraper must include delays, proxy rotation, and error recovery.
  • Completeness Assurance: Ensuring that no restaurant is left out demands robust link discovery and sanity checks against directory totals.

Project Goals

Navratri Mega Sale Price Tracking

Actowiz Solutions committed to:

  • Extracting every restaurant listing from iens.nl and Eet.nu
  • Capturing the four key data points per restaurant
  • Enriching with email addresses wherever possible
  • Delivering a clean Excel (XLSX/CSV) with distinct columns
  • Ensuring high data completeness and accuracy
  • Providing data quickly, with progress milestones

Technology & Tools

Function Tools / Libraries
Core Crawling Python (Scrapy + Requests + Playwright)
Dynamic Page Handling Playwright / Selenium
Parsing BeautifulSoup, lxml
Email Extraction Regex, site crawling, contact-page discovery
Data Storage Pandas (DataFrame), SQLite / CSV
Logging & Monitoring Logging module, retry middleware
Proxy & Throttling Rotating proxies, crawl delays, back-off logic
Output Excel (XLSX) + CSV

Architecture & Workflow

[ iens.nl & Eet.nu Directory Pages ]

↓ [ URL Discovery & Pagination Crawler ]

↓ [ Listing Page Scraper (extract name, city, review count, email link if available) ]

↓ [ Restaurant Site Visit (if needed) to find email ]

↓ [ Data Cleaning & Normalization ]

↓ [ Deduplication & Completeness Checks ]

↓ [ Export to Excel / CSV ]

Key Steps:

Pagination & Region Discovery

Crawl all region and city-level pages to find all restaurant listing URLs.

Listing Extraction

On each listing page, extract:

  • Restaurant name
  • City
  • Total reviews
  • Email (if present)
Fallback Email Discovery

If no email on listing, follow the restaurant's website link (if available) and visit "Contact" or "About" pages to find email via regex patterns.

Cleaning & Normalization
  • Standardize city names
  • Convert review counts to integer
  • Remove whitespace and encoding errors
Deduplication & Completeness Assurance
  • Use restaurant name + city combination to detect duplicates
  • Cross-check listing counts per region with totals reported on directory (if available)
  • Flag missing entries for audit
Export Formats & Delivery

Output Excel file with columns: Business Name, Email, Total Reviews, City

Also deliver CSV for compatibility

Sample Dataset (Illustrative Example)

Business Name Email Total Reviews City
De Hasselhoff Restaurant info@hasselhoff.nl 215 Amsterdam
Bistro Van Gogh contact@bistrovangogh.nl 142 Utrecht
De Pannenkoekenbakker info@pannenkoekenbakker.nl 318 Rotterdam
Sushi House NL info@sushihousenl.nl 54 The Hague
Café de Vrienden cafedevrienden@gmail.com 78 Eindhoven

Performance & Milestones

Total Listings Extracted (Example): 9,500+

Email Addresses Found: ~6,800 (72%)

Cities Covered: ~220

Project Duration: ~6 days

Completeness Estimate: >98% listing coverage

Data Accuracy: ~99% on name/ city / review counts

Chart Idea – Email Coverage vs Listings by City

Create a bar chart per city (top 10 cities) showing:

  • Total restaurant listings
  • Number of those with email extracted

This highlights which cities had higher email coverage and where fallback discovery was needed.

Infographic Layout – "How We Built a Full Directory Scraper"

Navratri Mega Sale Price Tracking

Implementation Highlights

  • Playwright or headless browser used for portions of listings or dynamic loading.
  • Retry and fallback logic for pages failing due to timeouts or changes.
  • Proxy rotation and crawl delays to minimize blocking risk.
  • Parallel crawling (within safe concurrency limits) to speed up extraction.
  • Logging module captures each failed URL, reason, retry count, and timestamp.
Example log entry:

Results & Insights

  • High Email Capture Rate: ~72% of listings had an email directly or via fallback.
  • City Distributions: Amsterdam had ~1,200 listings, Rotterdam ~800, Utrecht ~550, etc.
  • Top Cities by Email Coverage: Smaller towns had higher rates (fewer "no email" cases).
  • Review Counts Variability: Some listings had zero reviews; others had 500+ in major cities.

These insights help downstream analytics—for instance, targeting restaurants with reviews >100 and valid email.

Data Quality & Limitations

Known Gaps:
  • Some restaurants may use contact forms only (no email in text), which cannot be reliably extracted.
  • A few listings had email obfuscation (e.g. 'contact [at] domain'), requiring manual decoding.
  • Some dynamic listings only fully load via infinite scroll; small number of edge-case listings may get missed.
Mitigation Approach:
  • Flag entries with missing email for manual review.
  • Use heuristics and pattern matching to guess obfuscated emails (e.g. replace [at] tokens).
  • Cross-validate counts of listings per region with directory metrics (if available).

Impact for the Client

  • Delivered a complete, email-rich directory of restaurants across both platforms.
  • Replaced weeks of manual data collection with automated pipelines.
  • Enabled targeted outreach campaigns (email marketing, partnerships).
  • Provided dataset in ready-to-use Excel format—integrated with the client's CRM.

Why Actowiz Solutions

  • Proven expertise in large-scale directory scraping and email enrichment.
  • Experience with dynamic site rendering, fallback logic, and robust logging.
  • Ability to deliver clean, verified output on tight timelines.
  • Focus on compliance, error handling, and completeness.

Next Steps / Enhancements

  • Expand to other directories (TripAdvisor NL, Yelp NL, etc.).
  • Add additional fields like phone numbers, website URLs, opening hours, cuisine type.
  • Automate periodic updates (weekly/monthly) to keep data fresh.
  • Build a dashboard to visualize email coverage by city, review distribution, etc.

Conclusion

This case study shows how Actowiz Solutions tackled full-scale directory scraping across two large restaurant listing platforms in the Netherlands. The project delivered:

  • Nearly complete listing coverage
  • High email extraction rate
  • Clean, normalized records
  • Rapid turnaround

With robust retry logic, fallback paths, and classification, the client now has a marketing-ready dataset for outreach and analytics.

Social Proof That Converts

Trusted by Global Leaders Across Q-Commerce, Travel, Retail, and FoodTech

Our web scraping expertise is relied on by 3,000+ global enterprises including Zomato, Tata Consumer, Subway, and Expedia — helping them turn web data into growth.

3,000+ Enterprises Worldwide
50+ Countries Served
20+ Industries
Join 3,000+ companies growing with Actowiz →
Real Results from Real Clients

Hear It Directly from Our Clients

Watch how businesses like yours are using Actowiz data to drive growth.

1 min
★★★★★
"Actowiz Solutions offered exceptional support with transparency and guidance throughout. Anna and Saga made the process easy for a non-technical user like me. Great service, fair pricing!"
FC
Febbin Chacko
Small Business Owner
Fin
2 min
★★★★★
"Actowiz delivered impeccable results for our company. Their team ensured data accuracy and on-time delivery. The competitive intelligence completely transformed our pricing strategy."
JI
Javier Ibanez
Head of Analytics
atacy.es
1:30
★★★★★
"What impressed me most was the speed — we went from requirement to production data in under 48 hours. The API integration was seamless and the support team is always responsive."
RK
Rajesh Kumar
CTO
QComm Brand
4.8/5 Average Rating
📹 50+ Video Testimonials
🔄 92% Client Retention
🌍 50+ Countries Served

Join 3,000+ Companies Growing with Actowiz

From Zomato to Expedia — see why global leaders trust us with their data.

Why Global Leaders Trust Actowiz

Backed by automation, data volume, and enterprise-grade scale — we help businesses from startups to Fortune 500s extract competitive insights across the USA, UK, UAE, and beyond.

icons
7+
Years of Experience
Proven track record delivering enterprise-grade web scraping and data intelligence solutions.
icons
4,000+
Projects Delivered
Serving startups to Fortune 500 companies across 50+ countries worldwide.
icons
200+
In-House Experts
Dedicated engineers across scrapers, AI/ML models, APIs, and data quality assurance.
icons
9.2M
Automated Workflows
Running weekly across eCommerce, Quick Commerce, Travel, Real Estate, and Food industries.
icons
270+ TB
Data Transferred
Real-time and batch data scraping at massive scale, across industries globally.
icons
380M+
Pages Crawled Weekly
Scaled infrastructure for comprehensive global data coverage with 99% accuracy.

AI Solutions Engineered
for Your Needs

LLM-Powered Attribute Extraction: High-precision product matching using large language models for accurate data classification.
Advanced Computer Vision: Fine-grained object detection for precise product classification using text and image embeddings.
GPT-Based Analytics Layer: Natural language query-based reporting and visualization for business intelligence.
Human-in-the-Loop AI: Continuous feedback loop to improve AI model accuracy over time.
🎯 Product Matching 🏷️ Attribute Tagging 📝 Content Optimization 💬 Sentiment Analysis 📊 Prompt-Based Reporting

Connect the Dots Across
Your Retail Ecosystem

We partner with agencies, system integrators, and technology platforms to deliver end-to-end solutions across the retail and digital shelf ecosystem.

icons
Analytics Services
icons
Ad Tech
icons
Price Optimization
icons
Business Consulting
icons
System Integration
icons
Market Research
Become a Partner →

Popular Datasets — Ready to Download

Browse All Datasets →
icons
Amazon
eCommerce
Free 100 rows
icons
Zillow
Real Estate
Free 100 rows
icons
DoorDash
Food Delivery
Free 100 rows
icons
Walmart
Retail
Free 100 rows
icons
Booking.com
Travel
Free 100 rows
icons
Indeed
Jobs
Free 100 rows

Latest Insights & Resources

View All Resources →
thumb
Blog

How IHG Hotels & Resorts Data Scraping Helps Overcome Real-Time Availability and Rate Monitoring Issues

How IHG Hotels & Resorts data scraping enables real-time rate tracking, improves availability monitoring, and boosts revenue decisions.

thumb
Case Study

UK Grocery Chain Achieves 300% ROI on Promotional Campaigns

How a top-10 UK grocery retailer used Actowiz grocery price scraping to achieve 300% promotional ROI and reduce competitive response time from 5 days to same-day.

thumb
Report

Track UK Grocery Products Daily Using Automated Data Scraping to Monitor 50,000+ UK Grocery Products from Morrisons, Asda, Tesco, Sainsbury’s, Iceland, Co-op, Waitrose, Ocado

Track UK Grocery Products Daily Using Automated Data Scraping across Morrisons, Asda, Tesco, Sainsbury’s, Iceland, Co-op, Waitrose, and Ocado for insights.

Start Where It Makes Sense for You

Whether you're a startup or a Fortune 500 — we have the right plan for your data needs.

icons
Enterprise
Book a Strategy Call
Custom solutions, dedicated support, volume pricing for large-scale needs.
icons
Growing Brand
Get Free Sample Data
Try before you buy — 500 rows of real data, delivered in 2 hours. No strings.
icons
Just Exploring
View Plans & Pricing
Transparent plans from $500/mo. Find the right fit for your budget and scale.
GeoIp2\Model\City Object
(
    [raw:protected] => Array
        (
            [city] => Array
                (
                    [geoname_id] => 4509177
                    [names] => Array
                        (
                            [de] => Columbus
                            [en] => Columbus
                            [es] => Columbus
                            [fr] => Columbus
                            [ja] => コロンバス
                            [pt-BR] => Columbus
                            [ru] => Колумбус
                            [zh-CN] => 哥伦布
                        )

                )

            [continent] => Array
                (
                    [code] => NA
                    [geoname_id] => 6255149
                    [names] => Array
                        (
                            [de] => Nordamerika
                            [en] => North America
                            [es] => Norteamérica
                            [fr] => Amérique du Nord
                            [ja] => 北アメリカ
                            [pt-BR] => América do Norte
                            [ru] => Северная Америка
                            [zh-CN] => 北美洲
                        )

                )

            [country] => Array
                (
                    [geoname_id] => 6252001
                    [iso_code] => US
                    [names] => Array
                        (
                            [de] => USA
                            [en] => United States
                            [es] => Estados Unidos
                            [fr] => États Unis
                            [ja] => アメリカ
                            [pt-BR] => EUA
                            [ru] => США
                            [zh-CN] => 美国
                        )

                )

            [location] => Array
                (
                    [accuracy_radius] => 20
                    [latitude] => 39.9625
                    [longitude] => -83.0061
                    [metro_code] => 535
                    [time_zone] => America/New_York
                )

            [postal] => Array
                (
                    [code] => 43215
                )

            [registered_country] => Array
                (
                    [geoname_id] => 6252001
                    [iso_code] => US
                    [names] => Array
                        (
                            [de] => USA
                            [en] => United States
                            [es] => Estados Unidos
                            [fr] => États Unis
                            [ja] => アメリカ
                            [pt-BR] => EUA
                            [ru] => США
                            [zh-CN] => 美国
                        )

                )

            [subdivisions] => Array
                (
                    [0] => Array
                        (
                            [geoname_id] => 5165418
                            [iso_code] => OH
                            [names] => Array
                                (
                                    [de] => Ohio
                                    [en] => Ohio
                                    [es] => Ohio
                                    [fr] => Ohio
                                    [ja] => オハイオ州
                                    [pt-BR] => Ohio
                                    [ru] => Огайо
                                    [zh-CN] => 俄亥俄州
                                )

                        )

                )

            [traits] => Array
                (
                    [ip_address] => 216.73.216.153
                    [prefix_len] => 22
                )

        )

    [continent:protected] => GeoIp2\Record\Continent Object
        (
            [record:GeoIp2\Record\AbstractRecord:private] => Array
                (
                    [code] => NA
                    [geoname_id] => 6255149
                    [names] => Array
                        (
                            [de] => Nordamerika
                            [en] => North America
                            [es] => Norteamérica
                            [fr] => Amérique du Nord
                            [ja] => 北アメリカ
                            [pt-BR] => América do Norte
                            [ru] => Северная Америка
                            [zh-CN] => 北美洲
                        )

                )

            [locales:GeoIp2\Record\AbstractPlaceRecord:private] => Array
                (
                    [0] => en
                )

            [validAttributes:protected] => Array
                (
                    [0] => code
                    [1] => geonameId
                    [2] => names
                )

        )

    [country:protected] => GeoIp2\Record\Country Object
        (
            [record:GeoIp2\Record\AbstractRecord:private] => Array
                (
                    [geoname_id] => 6252001
                    [iso_code] => US
                    [names] => Array
                        (
                            [de] => USA
                            [en] => United States
                            [es] => Estados Unidos
                            [fr] => États Unis
                            [ja] => アメリカ
                            [pt-BR] => EUA
                            [ru] => США
                            [zh-CN] => 美国
                        )

                )

            [locales:GeoIp2\Record\AbstractPlaceRecord:private] => Array
                (
                    [0] => en
                )

            [validAttributes:protected] => Array
                (
                    [0] => confidence
                    [1] => geonameId
                    [2] => isInEuropeanUnion
                    [3] => isoCode
                    [4] => names
                )

        )

    [locales:protected] => Array
        (
            [0] => en
        )

    [maxmind:protected] => GeoIp2\Record\MaxMind Object
        (
            [record:GeoIp2\Record\AbstractRecord:private] => Array
                (
                )

            [validAttributes:protected] => Array
                (
                    [0] => queriesRemaining
                )

        )

    [registeredCountry:protected] => GeoIp2\Record\Country Object
        (
            [record:GeoIp2\Record\AbstractRecord:private] => Array
                (
                    [geoname_id] => 6252001
                    [iso_code] => US
                    [names] => Array
                        (
                            [de] => USA
                            [en] => United States
                            [es] => Estados Unidos
                            [fr] => États Unis
                            [ja] => アメリカ
                            [pt-BR] => EUA
                            [ru] => США
                            [zh-CN] => 美国
                        )

                )

            [locales:GeoIp2\Record\AbstractPlaceRecord:private] => Array
                (
                    [0] => en
                )

            [validAttributes:protected] => Array
                (
                    [0] => confidence
                    [1] => geonameId
                    [2] => isInEuropeanUnion
                    [3] => isoCode
                    [4] => names
                )

        )

    [representedCountry:protected] => GeoIp2\Record\RepresentedCountry Object
        (
            [record:GeoIp2\Record\AbstractRecord:private] => Array
                (
                )

            [locales:GeoIp2\Record\AbstractPlaceRecord:private] => Array
                (
                    [0] => en
                )

            [validAttributes:protected] => Array
                (
                    [0] => confidence
                    [1] => geonameId
                    [2] => isInEuropeanUnion
                    [3] => isoCode
                    [4] => names
                    [5] => type
                )

        )

    [traits:protected] => GeoIp2\Record\Traits Object
        (
            [record:GeoIp2\Record\AbstractRecord:private] => Array
                (
                    [ip_address] => 216.73.216.153
                    [prefix_len] => 22
                    [network] => 216.73.216.0/22
                )

            [validAttributes:protected] => Array
                (
                    [0] => autonomousSystemNumber
                    [1] => autonomousSystemOrganization
                    [2] => connectionType
                    [3] => domain
                    [4] => ipAddress
                    [5] => isAnonymous
                    [6] => isAnonymousProxy
                    [7] => isAnonymousVpn
                    [8] => isHostingProvider
                    [9] => isLegitimateProxy
                    [10] => isp
                    [11] => isPublicProxy
                    [12] => isResidentialProxy
                    [13] => isSatelliteProvider
                    [14] => isTorExitNode
                    [15] => mobileCountryCode
                    [16] => mobileNetworkCode
                    [17] => network
                    [18] => organization
                    [19] => staticIpScore
                    [20] => userCount
                    [21] => userType
                )

        )

    [city:protected] => GeoIp2\Record\City Object
        (
            [record:GeoIp2\Record\AbstractRecord:private] => Array
                (
                    [geoname_id] => 4509177
                    [names] => Array
                        (
                            [de] => Columbus
                            [en] => Columbus
                            [es] => Columbus
                            [fr] => Columbus
                            [ja] => コロンバス
                            [pt-BR] => Columbus
                            [ru] => Колумбус
                            [zh-CN] => 哥伦布
                        )

                )

            [locales:GeoIp2\Record\AbstractPlaceRecord:private] => Array
                (
                    [0] => en
                )

            [validAttributes:protected] => Array
                (
                    [0] => confidence
                    [1] => geonameId
                    [2] => names
                )

        )

    [location:protected] => GeoIp2\Record\Location Object
        (
            [record:GeoIp2\Record\AbstractRecord:private] => Array
                (
                    [accuracy_radius] => 20
                    [latitude] => 39.9625
                    [longitude] => -83.0061
                    [metro_code] => 535
                    [time_zone] => America/New_York
                )

            [validAttributes:protected] => Array
                (
                    [0] => averageIncome
                    [1] => accuracyRadius
                    [2] => latitude
                    [3] => longitude
                    [4] => metroCode
                    [5] => populationDensity
                    [6] => postalCode
                    [7] => postalConfidence
                    [8] => timeZone
                )

        )

    [postal:protected] => GeoIp2\Record\Postal Object
        (
            [record:GeoIp2\Record\AbstractRecord:private] => Array
                (
                    [code] => 43215
                )

            [validAttributes:protected] => Array
                (
                    [0] => code
                    [1] => confidence
                )

        )

    [subdivisions:protected] => Array
        (
            [0] => GeoIp2\Record\Subdivision Object
                (
                    [record:GeoIp2\Record\AbstractRecord:private] => Array
                        (
                            [geoname_id] => 5165418
                            [iso_code] => OH
                            [names] => Array
                                (
                                    [de] => Ohio
                                    [en] => Ohio
                                    [es] => Ohio
                                    [fr] => Ohio
                                    [ja] => オハイオ州
                                    [pt-BR] => Ohio
                                    [ru] => Огайо
                                    [zh-CN] => 俄亥俄州
                                )

                        )

                    [locales:GeoIp2\Record\AbstractPlaceRecord:private] => Array
                        (
                            [0] => en
                        )

                    [validAttributes:protected] => Array
                        (
                            [0] => confidence
                            [1] => geonameId
                            [2] => isoCode
                            [3] => names
                        )

                )

        )

)
 country : United States
 city : Columbus
US
Array
(
    [as_domain] => amazon.com
    [as_name] => Amazon.com, Inc.
    [asn] => AS16509
    [continent] => North America
    [continent_code] => NA
    [country] => United States
    [country_code] => US
)

Request Free Sample Data

Our team will reach out within 2 hours with 500 rows of real data — no credit card required.

+1
Free 500-row sample · No credit card · Response within 2 hours