ScreenshotNeo

BlogHow-to

How to Monitor Local Competitors on Delivery Platforms

A repeatable workflow to compare nearby delivery-app menus, prices, promotions, availability, delivery times and search visibility.

By the ScreenshotNeo team1 October 20269 min read

Direct answer: monitor competitors by checking the same restaurants from the same delivery address, at consistent times, on each relevant marketplace. Save dated screenshots and structured observations for equivalent menu items, listed prices, promotions, availability, delivery estimates and placement. Repeat across dayparts before drawing conclusions, then compare the observations with your own sales and menu data.

1. Define the observation you want to repeat

Write a short monitoring brief before opening an app. It should answer:

  • Which delivery marketplace and country or city are in scope?
  • Which delivery address or map location represents your service area?
  • Which restaurants are in the comparison set?
  • Which menu categories and equivalent items will you compare?
  • Which dayparts and dates will you observe?
  • Which decisions will the report support, such as changing a price, promotion, menu photo or delivery radius?

Use one consistent address for every observation. Marketplace presentation is local and time-sensitive, so record the address, marketplace, date and local time with every capture.

2. Choose a stable competitor set

Start with nearby restaurants that compete for the same occasions and customers. Include direct cuisine competitors, restaurants that appear beside you for important searches, and strong operators with similar delivery zones. Keep the set stable for several reporting cycles; changing the restaurants each week makes trends difficult to interpret.

Do not assume DoorDash, Uber Eats and Grubhub are the entire market. A 2024 peer-reviewed study mapped 495 independent US food-delivery platforms and surveyed 29 of them, showing why local services can matter in a particular city. Add any independent marketplace that customers in your area actually use.

3. Capture comparable fields

Record observations in a spreadsheet or database. A useful row represents one restaurant, one marketplace, one location and one observation time.

Field What to record Why it matters
Context Marketplace, delivery address, date, local time, device or viewport Makes snapshots comparable
Restaurant Name, cuisine, distance and service area shown Identifies the listing and its apparent reach
Placement Search term, collection, category and position or page observed Shows visibility without claiming why the app ranked it there
Menu item Exact name, size, options and modifiers Prevents false price comparisons
Price Listed price, fees shown, discount and final displayed price Separates the base price from a temporary offer
Availability Available, sold out, hidden or unavailable for delivery Availability can change demand and ranking signals
Delivery promise Displayed estimate or range Useful only as a time-stamped snapshot
Promotion Offer text, minimum spend, eligible items and expiry if shown Explains apparent price differences
Evidence Screenshot filename, URL or listing identifier and notes Lets another person audit the entry

Compare equivalent items only. A 12-inch pizza with two toppings is not equivalent to a 10-inch pizza with no toppings. Record modifiers separately when they materially change the price.

4. Run observations at useful times

  1. Baseline: capture every competitor during the same quiet daypart.
  2. Lunch and dinner: repeat during the periods that drive your orders.
  3. Weekday and weekend: include at least one of each.
  4. Promotion windows: capture before, during and after a major offer when possible.
  5. Repeat: collect multiple dates before changing your menu or prices.

An app listing is a snapshot, not a timeless market fact. A long delivery estimate may reflect a temporary kitchen backlog; a missing item may be a short stock issue. Look for repeated patterns.

5. A do-it-yourself browser workflow

For a small set of restaurants, a real browser gives the most faithful view because marketplaces render location, login state, consent dialogs and dynamic menus in the page. Use a test account and follow each marketplace’s current merchant agreement, terms and robots or automation rules. Do not bypass bot checks, CAPTCHAs, access controls or rate limits.

Install Playwright for Python

python -m pip install playwright
python -m playwright install chromium

Runnable capture script

from datetime import datetime, timezone
from pathlib import Path
from playwright.sync_api import sync_playwright

TARGETS = [
    {"name": "competitor-a", "url": "https://example.com/restaurant-a"},
    {"name": "competitor-b", "url": "https://example.com/restaurant-b"},
]

OUT = Path("delivery-observations")
OUT.mkdir(exist_ok=True)

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    context = browser.new_context(
        viewport={"width": 1440, "height": 1200},
        locale="en-US",
        timezone_id="America/New_York",
    )
    page = context.new_page()
    for target in TARGETS:
        started = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
        try:
            page.goto(target["url"], wait_until="domcontentloaded", timeout=60000)
            page.wait_for_timeout(3000)
            page.screenshot(path=str(OUT / f"{target['name']}-{started}.png"), full_page=True)
            print({"name": target["name"], "url": page.url, "captured_at": started})
        except Exception as exc:
            print({"name": target["name"], "error": str(exc), "captured_at": started})
    browser.close()

Replace the example URLs with pages you are permitted to access. For a location-sensitive marketplace, establish the delivery address in the approved account or browser profile before the capture. If a page requires a human login or consent action, complete that step manually and reuse the permitted profile rather than attempting to automate a challenge.

Make the data usable

  • Save one JSON or CSV row beside each screenshot.
  • Use a stable restaurant identifier instead of relying only on display names.
  • Store prices as numeric values and promotions as separate fields.
  • Keep raw screenshots immutable; put corrections in a new version.
  • Hash or redact customer information if it appears in a page.

6. Analyze changes without overclaiming

Calculate simple deltas between observations: price change, promotion present or absent, availability change, delivery-estimate change and position change. Group results by marketplace, daypart and item. A useful report might say, “Three of five dinner observations showed a 35–45 minute estimate,” rather than “the restaurant is always slow.”

DoorDash says restaurant ranking reflects customer preferences and names popularity, speed, order accuracy and pricing as variables. It also says delivery prices do not have to match in-store prices and recommends keeping them close, while stating that markups can hurt conversion and retention. Treat these as DoorDash’s stated position, not independent proof of causation. Your observations can show what appeared, but they cannot establish why an algorithm placed a listing where it did.

Keep competitor observations separate from your own sales, margin and fulfillment data. Join them only in an internal analysis with clear timestamps and definitions.

7. Use your own channel controls carefully

DoorDash’s Merchant Portal Menu Editor supports menu names, categories, prices, modifiers, options and availability. Some POS and middleware configurations also support channel-specific prices and menu overrides. DoorDash’s Australia documentation names Toast, Olo Rails, Checkmate, Otter, Chowly and Deliverect in implementation guides; its 2025 preferred-integration announcement describes a cohort including Checkmate, Chowly, ChowNow, Deliverect, Otter, PAR, Qu, Square, Stream, Toast and UrbanPiper. Availability and behavior depend on market, provider and version.

These tools help administer your own channels. The cited documentation does not establish that they provide competitor surveillance.

8. Compliance and data-handling checklist

  • Read the current merchant and developer terms for every marketplace and market.
  • Confirm that your collection method is authorized before scheduling it.
  • Do not defeat CAPTCHAs, bot checks, authentication or technical restrictions.
  • Collect only the fields needed for the business decision.
  • Restrict access to screenshots and remove personal or order information.
  • Set a retention period and document who can export or share the data.
  • Review integrations before combining platform data with other datasets.

For example, Uber’s US merchant terms place conditions on menu and pickup-price data and restrict specified uses of Uber Olo Data, including some disclosure to competitors. That agreement applies according to its scope and your integration; do not generalize it into a universal rule. Check the current terms that govern your account.

9. Or skip the browser setup

ScreenshotNeo captures a page with one request and can be used for a permitted, repeatable observation workflow. It accepts the cookie or consent banner like a visitor and removes more than 60 known consent platforms, newsletter popups and chat widgets before the capture; each cleanup step can be turned off. Bot checks and CAPTCHAs, blank pages, timeouts, failed loads and cache hits cost nothing, and the response identifies the result with X-Page-Verdict and X-Billed headers. An MCP server provides take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients.

See the ScreenshotNeo API documentation for the complete option list, including full-page lazy-image loading, CSS-element capture, device presets, dark mode, custom CSS and JavaScript, waits, request blocking, headers, cookies, user agent, timezone, geolocation, resizing, caching, signed links, asynchronous jobs, bulk capture and usage reporting.

cURL

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Python

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)

Node.js

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

Replace the example URL with a marketplace page you are allowed to capture. Add a stable cache TTL when you need repeatable snapshots, or disable caching when freshness matters. Use bulk capture for up to 100 URLs per call, asynchronous jobs with signed webhooks for larger schedules, and the usage API to reconcile your report.

Free usage includes 1,000 screenshots each month with no card. Paid plans start at $5 for 3,000 shots; every feature is available on every plan. Create a free ScreenshotNeo account and start with the no-card 1,000-shot allowance.

10. Troubleshooting

Symptom Likely cause Fix
Prices differ between two runs Different address, modifier, daypart or promotion Use the same location and item definition; record both listed price and offer
Restaurant is missing Marketplace availability or service area changed Record it as unavailable, verify the address and repeat later
Page is blank in automation JavaScript did not finish, a consent flow blocked rendering or access was denied Use a permitted browser profile, wait for a known selector, and stop if a bot challenge appears
Screenshot cuts off the menu Viewport capture used instead of full-page capture Capture full page or capture the menu element separately
Lazy images are missing Images load only after scrolling Scroll in the browser or use a capture option that loads lazy images
Delivery estimate changes rapidly Kitchen load and courier supply changed Repeat at the same daypart and report a range, not one universal value
ScreenshotNeo response is not a clean image Target timed out, failed, was blank or triggered a bot check Inspect X-Page-Verdict and X-Billed, then fix the target or retry within permitted limits
Unexpected ScreenshotNeo cost A successful clean capture was billed Use response headers and the usage API; cache hits and failed captures are not billed

11. Performance, reliability and cost

  • Consistency: fix address, locale, timezone, viewport and daypart so changes represent the marketplace rather than your setup.
  • Throughput: capture only the fields needed for the decision, batch permitted URLs, and schedule outside peak load when the marketplace allows it.
  • Retries: retry transient network failures with backoff; do not repeatedly retry a bot check or CAPTCHA.
  • Evidence: retain the raw image, timestamp, request parameters and verdict together.
  • Cost: browser automation consumes your own compute and maintenance time. ScreenshotNeo bills only clean shots; failed loads, blank pages, bot checks, timeouts and cache hits are free.
  • Freshness: a short cache TTL reduces duplicate work, while a zero or low TTL is appropriate when promotions and availability must be current.

12. Reporting template

End each reporting cycle with four parts:

  1. Scope: marketplaces, address, dates, dayparts and competitor set.
  2. Observed changes: item prices, promotions, availability, delivery estimates and placement.
  3. Confidence and limits: number of observations, missing pages, changed locations and terms that restricted collection.
  4. Action: one or two reversible tests for your own menu or channel, with a review date.

FAQ

How often should a restaurant monitor competitors?

Use a cadence that matches your decisions: weekly for routine pricing and availability, plus extra observations around major promotions or menu changes. Always compare multiple dates.

Should I compare final checkout totals?

Record them only when the same address, basket, fees, taxes and account conditions are available. Keep the listed menu price and promotion as separate fields because checkout totals can include changing fees.

Can one screenshot explain a ranking change?

No. It records what appeared at one time and place. DoorDash names several ranking variables, and the reviewed sources do not establish a universal formula.

Can POS software monitor competitor menus?

The cited POS and middleware documentation supports managing your own channel menus, prices and availability. It does not establish competitor monitoring.

What should I do when a platform’s terms are unclear?

Pause automated collection, read the current agreement for your market and integration, and ask the platform or counsel for a written interpretation.