Short-Term Rental Multi-Channel iCal Double-Booking
Pricing
from $3.00 / 1,000 run starteds
Short-Term Rental Multi-Channel iCal Double-Booking
Compare the iCal exports of one rental unit. Report double bookings and unmirrored blocks.
Pricing
from $3.00 / 1,000 run starteds
Rating
0.0
(0)
Developer
kingii98
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Rental iCal Double-Booking Finder
This Actor compares the iCal exports of one rental unit. It reports two kinds of conflict:
overlap: two feeds both hold a reservation for the same dates. An event whose summary has "not available", "blocked", or "closed" is a block, not a reservation.unmirrored_block: one feed blocks dates that start soon, and another feed of the same listing has no block for them.
The Actor uses HTTP GET only. It uses no login, browser, proxy, or paid API. Use only export URLs that you are authorized to use. The platform terms for automated use of export URLs were not checked. This is an open risk.
Input
| Field | Default | Limit |
|---|---|---|
listings | one demo listing | 100 listings. Each has listing_id and 2 to 10 feeds (label, url). |
secret_listings | empty | Optional secret JSON text. Same shape as listings. |
window_days | 180 | 1 to 540 |
min_overlap_nights | 1 | 1 to 540 |
urgent_days | 14 | 0 to 540 |
The default listing uses two public holiday feeds. A run with empty input uses these defaults and succeeds. The feed URLs contain access tokens. The Actor never writes a URL to the dataset or to the log. The input schema cannot mark the nested url field as secret. So put real export URLs in secret_listings. This field is a JSON string with the same shape as listings. The platform hides its value. If it is set, the Actor ignores listings.
Output
The dataset has two row types.
Conflict row: type = conflict, listing_id, conflict_type, feeds (labels), event_uids, start_date, end_date, nights, days_until_start.
Summary row (one for each listing): type = summary, listing_id, feeds_fetched, feeds_failed (label, HTTP status, error), conflict_count, listing_clear. listing_clear is true only if no feed failed and no conflict was found. A listing with invalid input gets a summary row with an error field.
A failed feed, an unreachable target, or zero findings never fails the run. The status message states the result.
Pay-per-event pricing
| Event | Charged | Count |
|---|---|---|
run-started | Once at the start of each run. | 1 |
listing-checked | For each listing with valid input, also if a feed failed. | 1 for each listing |
conflict-found | For each overlap or unmirrored block reported. | 1 for each conflict row |
The Actor stops when the maximum total charge is reached.
Limits and safety
- Feed URLs must use http or https. The Actor rejects localhost, private, and reserved addresses, also after DNS resolution and after each redirect.
- Maximum 3 redirects, 15 s timeout for each network operation, 30 s total for each feed, 1 MB for each feed, 10 parallel fetches.
- The parser does not expand recurring events (
RRULE). It ignores cancelled events. - An event end date is the checkout day. Back-to-back stays are not an overlap.
Demo run cost
The default input uses the same holiday feed twice. Each holiday in the window gives one overlap row. Each row costs USD 0.02.
Development
uv run pytestuv run ruff check .