Jiffy On Demand Scraper - Services, Profiles & Reviews
Pricing
from $2.20 / 1,000 results
Jiffy On Demand Scraper - Services, Profiles & Reviews
Extract public Jiffy On Demand service catalogs, professional contacts, reviews and rankings across eight Canadian and US cities. Pay per delivered row plus a start fee.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
Features
Share
Jiffy On Demand Scraper
Export public Jiffy service catalogs, professional profiles and reviews from eight Canadian and US cities as structured rows.
- Service names, city coverage and published prices.
- Professional names, public phones and emails when available.
- Reviews, rankings and recent service activity.
- Company contacts and regional reference data.
- Pay $3.00 per 1,000 rows on the Free plan, plus a start fee.
What does Jiffy On Demand Scraper do?
The Actor collects public data from jiffyondemand.com. Supported cities are Toronto, Ottawa, Calgary, Edmonton, Vancouver, Montreal, Boston and Chicago. It does not book services or access private accounts.
- Services: city catalogs, individual services, families and cross-city availability.
- Professionals: individual profiles, public UID lists, sitemap discovery and service rankings.
- Reviews: one professional's reviews, or optional review rows alongside profiles.
- Reference data: regions, company pages, service statistics and rating metadata.
includeReviews is off by default. Each review is a separate billed row, sharing the limit with professional rows. includeStats and includeGallery are also off by default; they add attributes to existing rows rather than separate rows.
What data can you extract from Jiffy On Demand?
rowType and kind identify the entity. Rows also have id, name and, when available, url. Fields vary by type; these are representative fields, not a promise that every value is present.
Service rows (service)
| Field | Description | Example |
|---|---|---|
slug | Service identifier used in its URL | electrical |
regionId | City identifier | 6 |
serviceId | Service identifier shared across cities | 123 |
unitPriceCents | Published unit price, in cents | null |
minimumChargeCents | Published minimum charge, in cents | null |
currency | Currency supplied for the service or city | CAD |
Professional rows (pro)
| Field | Description | Example |
|---|---|---|
uid | Public profile UID | example_uid |
professionalId | Numeric professional identifier | 123 |
name | Public professional name | Jane Doe |
phones | Public phone entries | [{"value":"+1 555 0100"}] |
emails | Public email entries | [{"value":"name@example.com"}] |
bio | Published biography | null |
ratingSummary | Rating summary for ranked professionals | {} |
leadAbsences | Reasons contact fields are missing | {} |
Review rows (review)
| Field | Description | Example |
|---|---|---|
professionalId | Professional being reviewed | 123 |
rating | Published rating | 5 |
comment | Published review text | Example review text |
jobAddress | Customer job location, not a business address | {"city":"Toronto"} |
Family rows (family)
| Field | Description | Example |
|---|---|---|
familyId | Service family identifier | 1 |
serviceIds | Services belonging to this family | [123] |
Availability rows (availability)
| Field | Description | Example |
|---|---|---|
activeRegionIds | Cities where the service is active | [1,8] |
countries | Countries represented by the city entries | ["CA","US"] |
Region rows (region)
| Field | Description | Example |
|---|---|---|
name | City name | Montreal |
province | Province or state code | QC |
timeZone | Published time zone | America/Toronto |
currency | Published regional currency | CAD |
Company rows (company)
| Field | Description | Example |
|---|---|---|
address | Company address from its privacy page | {"locality":"Toronto"} |
emails | Published company emails | [{"value":"name@example.com"}] |
About-page rows (about)
| Field | Description | Example |
|---|---|---|
phones | Platform contacts, not professional contacts | [{"value":"+1 555 0100"}] |
emails | Platform email entries | [] |
Homepage rows (home)
| Field | Description | Example |
|---|---|---|
address | Company address, when available | {"locality":"Toronto"} |
phones | Platform contact entries | [] |
Statistics rows (service-stats)
| Field | Description | Example |
|---|---|---|
timePeriod | Source-defined reporting window | last_30_days |
jobsRequested | Requests in that window | 12 |
Metadata rows (metadata)
| Field | Description | Example |
|---|---|---|
metadata | Public rating and subscription reference data | {} |
How to scrape Jiffy On Demand
- Open Jiffy On Demand Scraper in Apify Console.
- Fill a target field, such as
region, or select asearchType. - Set
maxResultsto3for a small first run. - Click Start and wait for completion.
- Open the dataset and download your rows.
Empty input {} starts a Montreal catalog example capped at 1 row, using the form's sample values. Normal event charges still apply. With searchType: "auto", one target selects its mode automatically: detailUrls, then uids, then proSlug, then serviceSlug, then regionId or region. An explicit supported searchType is preserved. market: "us" alone selects Boston.
Automatic selection (auto)
Fill one target. For detailUrls, each supported link determines the entity collected.
City catalog (catalog)
Choose region. allRegions: true includes all eight cities, subject to the row limit.
One service (service)
Set serviceSlug and its city. Availability and prices can differ between cities.
One professional (pro)
Set a current public proSlug. If omitted in explicit pro mode, the Actor selects a sitemap profile.
Regions (regions)
List supported cities and their published regional attributes.
Privacy page (privacy)
Collect Jiffy Inc. company contact and address information.
About page (about)
Collect platform contacts, not individual professional contacts.
Homepage (home)
Collect a company row combining public company contact information.
Professional discovery (sitemap-pros)
Discover public profiles. Set filterProsByRegion to restrict collection to the chosen city.
Service families (families)
Collect service categories for the selected city.
Cross-city availability (availability)
Compare service coverage across all eight cities; this mode always includes every supported city.
Service discovery (sitemap-services)
Collect services referenced by the sitemap and available in the selected city.
Profiles by UID (profiles)
Provide uids from public profiles. Up to 200 identifiers are accepted.
Reviews (reviews)
Choose one professionalId, proSlug or UID. serviceId optionally filters reviews by service.
Rankings (top-pros)
Use serviceSlug and region, or serviceId with regionalServiceId. Rows retain source ranking order.
Recent activity (service-stats)
Use serviceSlug or serviceId for the source's last_30_days request count.
Rating reference (metadata)
Collect public rating and subscription reference data without a target identifier.
What to fill in
| Field | What to enter | Default |
|---|---|---|
searchType | A mode listed above | auto |
detailUrls | Supported jiffyondemand.com links | Empty |
uids | Public professional UID array | Empty |
proSlug | Slug from a public professional URL | Empty |
serviceSlug | Slug from a service URL | Empty |
region | One supported city slug | montreal; boston for us |
regionId | City ID, 1–8; overrides region | Empty |
market | ca or us; an explicit city takes precedence | ca |
maxResults | Rows per input, 1–200 | 70; example 1 |
professionalId | Numeric professional ID for reviews | Empty |
serviceId | Numeric service ID for reviews, rankings or statistics | Empty |
regionalServiceId | City-specific service ID for rankings | Empty |
startPage | Starting review, ranking or gallery page | 1 |
pageSize | Rows requested per page | 20 |
startOffset | Sitemap or within-page starting offset | 0 |
maxRequests | Request limit, including retries | 3000 |
maxPages | Requested page limit for paginated collection | 1 |
includeReviews | Add separate billed review rows | false |
maxReviews | Review limit per professional when adding reviews | 20 |
includeStats | Add recent activity to service rows | false |
includeGallery | Add gallery URLs with detail enrichment | false |
maxGallery | Gallery image limit per professional | 100 |
enrichDetails | Add available profile contacts and details | true |
allRegions | Include all eight cities in catalog and service discovery | false |
includeInactive | Include inactive services | false |
featuredOnly | Keep featured services | false |
seasonalOnly | Keep seasonal services | false |
quotedOnly | Filter by whether pricing requires a quote | Unfiltered |
familySlug | Service family slug or name filter | Empty |
familyId | Numeric family filter | Empty |
tag | Case-insensitive service tag or keyword filter | Empty |
filterProsByRegion | Keep professionals in the selected city | false |
Each example requests at most five rows. Replace example-pro and example_uid with actual public identifiers before using those examples.
Automatic city selection:
{"region":"montreal","maxResults":3}
City catalog:
{"searchType":"catalog","region":"boston","maxResults":3}
One service:
{"searchType":"service","region":"edmonton","serviceSlug":"electrical","maxResults":1}
One professional:
{"searchType":"pro","proSlug":"example-pro","maxResults":1}
Regions:
{"searchType":"regions","maxResults":5}
Privacy page:
{"searchType":"privacy","maxResults":1}
About page:
{"searchType":"about","maxResults":1}
Homepage:
{"searchType":"home","maxResults":1}
Professional discovery:
{"searchType":"sitemap-pros","maxResults":3}
Families:
{"searchType":"families","region":"montreal","maxResults":3}
Availability:
{"searchType":"availability","allRegions":true,"maxResults":3}
Service discovery:
{"searchType":"sitemap-services","region":"montreal","maxResults":3}
Profiles:
{"searchType":"profiles","uids":["example_uid"],"maxResults":1}
Reviews:
{"searchType":"reviews","proSlug":"example-pro","maxResults":3}
Rankings:
{"searchType":"top-pros","region":"boston","serviceSlug":"plumbing","maxResults":3}
Statistics:
{"searchType":"service-stats","region":"edmonton","serviceSlug":"electrical","maxResults":1}
Metadata:
{"searchType":"metadata","maxResults":1}
maxItems and limit are aliases for maxResults. Unknown fields do not cause rejection: close misspellings can be corrected; other fields are ignored with a note. Unusable targets fail before any row is charged, with an INVALID_INPUT: message naming the problem and expected input. The start fee can still apply. The INPUT_REPORT record in the default key-value store records input interpretation, corrections and ignored fields.
Output example
Illustrative service row; identifiers are examples and unavailable prices remain null:
{"id": "123","kind": "service","rowType": "service","name": "Electrical","slug": "electrical","url": "https://jiffyondemand.com/service/electrical","regionId": 6,"serviceId": 123,"country": "CA","currency": "CAD","unitPriceCents": null,"minimumChargeCents": null,"phones": [],"emails": [],"address": {"locality": "Edmonton", "region": "AB", "country": "CA"},"org": {"name": null},"status": null}
Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table.
Why use this Jiffy On Demand scraper?
- Pay per row: only delivered dataset rows incur row charges.
- Useful partial results: when collection returns partial data, the Actor delivers available rows and records warnings. Rows already written remain in the dataset.
- Clear outcomes:
RUN_SUMMARYrecords counts and warnings;ERROR_SUMMARYexplains failures. - Missing contacts stay empty: catalog services are not businesses, and public professional pages may omit contact details.
- Multiple inputs:
detailUrlsanduidsaccept lists. - No proxy setup: you do not need to set up proxies.
How much does it cost to scrape Jiffy On Demand?
Pricing is pay-per-event. At the default 512 MB memory, one start event costs $0.005. Start billing is one event per GB, with a minimum of one event. Platform usage is included in these prices.
| Apify plan | Start event | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.003 | $3.00 |
| Starter | $0.005 | $0.003 | $3.00 |
| Scale | $0.005 | $0.0026 | $2.60 |
| Business | $0.005 | $0.0022 | $2.20 |
maxResultsdefaults to 70 per detail URL or profile UID, or for one selected catalog/service/professional/review input. Values above 70 are collected in parts of 70; the accepted maximum is 200 per input.- Professional and added review rows share that limit.
- Free Apify accounts are limited to 200 rows per run and 10 runs of this Actor.
- The whole run stops at Maximum cost per run, named
maxTotalChargeUsdin the API.
Example: 5 delivered rows on the Free plan at 512 MB cost 5 × $0.003 + $0.005 = $0.020. A run delivering no rows has no row charge, but still incurs the start fee.
What happens when the run timeout is too short
Some collections, such as sitemap-pros with enrichDetails: true, profiles with includeReviews: true or several uids with a large maxResults, can take longer than the run timeout you chose. In that case the run does not fail. It ends early with the status message "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." and shows as ABORTED for a while.
When the results are ready, the same run starts again by itself, reports "Resumed: delivering N rows.", writes the rows to the same dataset and finishes as SUCCEEDED. Rows that were already delivered are skipped, so no row is delivered or charged twice. You do not need to start another run.
- This can happen at most 3 times per run. To avoid it, keep the default timeout of 3600 seconds.
- The synchronous API endpoints (
run-sync,run-sync-get-dataset-items) wait at most 300 seconds and can return an empty dataset while the run is paused. For larger jobs, start the run asynchronously and read the dataset after the run reaches SUCCEEDED, or use a webhook on the "succeeded" event.
Use with AI agents and the API
Apify MCP server (Claude, ChatGPT, Cursor, VS Code)
Add this Actor to a client supporting remote MCP servers:
https://mcp.apify.com?tools=lentic_clockss/jiffy-ondemand-scraper
Sign in with Apify through OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool returns run and dataset IDs; read rows with get-dataset-items. Clients without remote support can use npx @apify/actors-mcp-server --tools lentic_clockss/jiffy-ondemand-scraper with APIFY_TOKEN.
Example prompt: “Get three Jiffy service catalog rows for Montreal, including service names and published prices.”
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/jiffy-ondemand-scraper").call(run_input={"region": "montreal", "maxResults": 3})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/jiffy-ondemand-scraper').call({ region: 'montreal', maxResults: 3 });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For HTTP, send the input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~jiffy-ondemand-scraper/runs with an Authorization: Bearer header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Integrations
Use Apify integrations with Google Sheets, Make, Zapier, n8n, Slack, Airtable or webhooks. Schedule repeat collection with Apify Schedules.
FAQ
Is it legal to scrape Jiffy On Demand?
The Actor collects public data. You are responsible for following the site's terms and applicable data-protection laws. Processing personal data requires a lawful basis. This is an unofficial tool, not affiliated with Jiffy Inc.
Why did my run end as ABORTED?
A run that hits the platform timeout while collection is still in progress shows ABORTED briefly, then resumes in the same run once the result is ready and finishes as SUCCEEDED without double-charging. Only a manual stop ends the run permanently.
How many results can I get?
Set maxResults from 1 to 200 per input. Actual delivery depends on available data, filters, the charge ceiling and Free-plan limits. One profile without reviews usually needs only one row.
Why are some fields empty?
Catalog rows describe services, not professionals, so their phone and email arrays are empty. Professional street addresses are not supplied. Review job locations must not be treated as business addresses. Check leadAbsences for contact-specific explanations.
Do I need a Jiffy account?
No. The Actor uses public information and does not require your Jiffy login or cookies.
Can I scrape jiffy.com or jiffy.ca?
No. This Actor supports jiffyondemand.com, not similarly named domains.
How do I continue collecting profiles or reviews?
Use startOffset for sitemap discovery. For paginated modes, use reported nextPage and nextOffset as startPage and startOffset, keeping pageSize unchanged. Only continue when continuation information is present.
What if the dataset is empty?
A valid search may have no matches. Check RUN_SUMMARY and warnings; failures appear in ERROR_SUMMARY. Confirm the city and use current public slugs instead of inventing professional names.
Limitations
- Coverage is limited to the eight listed cities and public information.
- Keyword search, private accounts, job listings and booking actions are not supported.
- Public contact details, galleries, ratings and prices are not guaranteed for every entity.
- Rankings preserve source order; they are not an independent quality assessment.
- Short time limits or request limits can reduce delivery. An abrupt Actor stop can occur before any rows are written.
- Statistics use
last_30_days; arbitrary historical date windows are not supported.
Related scrapers
More local services and lead generation scrapers from the same publisher:
- Nextdoor Business Scraper
- Google Maps Scraper for Leads, CRM, and Reviews
- AlloVoisins Scraper
- Angi Scraper
- HomeStars Scraper
- Care.com Scraper
- TaskRabbit Scraper
- Yelp Business Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report problems or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.