A powerful Chrome extension that scrapes real-time ride data from Uber's website. This extension is tab-independent and only displays real scraped data - no mock or fallback data.
- β Real-time Scraping: Scrapes actual ride data from Uber's page
- β Tab Independent: Works regardless of which tab is currently active
- β No Mock Data: Only shows real scraped data from Uber
- β Auto-Detection: Automatically detects ride options, prices, and ETAs
- β Bridge Server: Includes Python FastAPI server for external API access
- β Beautiful UI: Modern, dark-themed popup interface
- β Export Options: Copy data as JSON or CSV
βββββββββββββββββββ
β Uber Website β β Content Script scrapes data
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Background.js β β Manages communication
ββββββββββ¬βββββββββ
β
ββββββββββββΊ Popup (displays data)
β
ββββββββββββΊ Bridge Server (WebSocket)
ββββΊ External APIs
-
Content Script (
content.js)- Injected into Uber pages
- Scrapes ride options, prices, ETAs, capacity
- Uses MutationObserver for real-time updates
- NO fallback or mock data
-
Background Service Worker (
background.js)- Manages WebSocket connection to bridge server
- Handles tab management and script injection
- Stores scraped data in chrome.storage
- Routes messages between components
-
Popup (
popup.html/js)- Displays scraped data in beautiful UI
- Shows cheapest and fastest options
- Export functionality (JSON/CSV)
- Only renders when real data is available
-
Bridge Server (
bridge_server.py)- FastAPI WebSocket server
- Exposes HTTP endpoints for external access
- Enables automation and integration
- Open Chrome and navigate to
chrome://extensions/ - Enable Developer mode (top right)
- Click Load unpacked
- Select the
uber-scraper-extensionfolder
The bridge server enables external API access:
cd uber-scraper-bridge
pip install fastapi uvicorn websockets
python bridge_server.pyServer will start at http://localhost:8765
- Navigate to Uber: Go to
https://m.uber.com/go/product-selection - Enter Locations: Set pickup and dropoff locations on Uber's page
- Open Extension: Click the extension icon
- Scrape Rides: Click "Scrape Rides" button
- View Results: See real-time ride data, prices, and ETAs
curl -X POST http://localhost:8765/scrapecurl -X POST http://localhost:8765/scrape \
-H "Content-Type: application/json" \
-d '{"pickup": "Times Square", "dropoff": "Central Park"}'curl http://localhost:8765/last-datacurl http://localhost:8765/cheapestcurl http://localhost:8765/fastestThe extension scrapes and returns the following data:
{
"success": true,
"timestamp": "2025-12-15T20:35:12.000Z",
"pickup": "Times Square, New York",
"dropoff": "Central Park, New York",
"totalRides": 5,
"rides": [
{
"productId": "ride-0",
"name": "UberX",
"vehicleType": "UberX",
"imageUrl": "https://...",
"capacity": 4,
"price": "βΉ250",
"originalPrice": "βΉ300",
"priceNumeric": 250,
"eta": "3 min",
"isSelected": false,
"scrapedAt": "2025-12-15T20:35:12.000Z"
}
],
"cheapestRide": { /* ride object */ },
"fastestRide": { /* ride object */ }
}This extension ONLY displays real scraped data from Uber's website. If you see an empty state, it means:
- You haven't scraped yet, OR
- No ride data is available on the current Uber page
The extension works independently of which tab is active:
- It finds or creates an Uber tab automatically
- Scrapes data from that tab
- Displays results in the popup
The extension uses specific CSS selectors to find ride data. If Uber changes their website structure, the selectors in content.js may need updating.
- Make sure you're on an Uber page with ride options
- Ensure pickup and dropoff locations are set
- Wait for the page to fully load
- The bridge server is not running (only needed for API access)
- Extension can still work without the bridge server
- Check if you're on the correct Uber URL
- Verify the content script is injected (check console)
- Uber may have changed their website structure
uber-scraper-extension/
βββ manifest.json # Extension configuration
βββ background.js # Service worker
βββ content.js # Scraping logic
βββ popup.html # Popup UI
βββ popup.js # Popup logic
βββ popup.css # Popup styles
βββ icons/ # Extension icons
uber-scraper-bridge/
βββ bridge_server.py # FastAPI WebSocket server
const SELECTORS = {
rideItem: '[data-testid="product_selector.list_item"]',
pickupInput: 'input[placeholder="Pickup location"]',
dropoffInput: 'input[placeholder="Dropoff location"]',
resultItem: '[data-testid="pudo-result"]',
priceText: '.css-jeMYle',
eta: '[data-testid="product_selector.list_item.eta_string"]',
vehicleName: 'p[class*="jsRibq"]'
};This is a development tool for educational purposes. Use responsibly and in accordance with Uber's Terms of Service.
This extension is designed to scrape real data only. When contributing:
- Never add mock or fallback data
- Maintain tab independence
- Update selectors if Uber's structure changes
- Test thoroughly on actual Uber pages
Made with β€οΈ for real-time ride data scraping