Evergreen Sailing Schedules: Cut-offs, ETD/ETA & Loops
Pricing
from $2.00 / 1,000 sailing scrapeds
Evergreen Sailing Schedules: Cut-offs, ETD/ETA & Loops
Scrape Evergreen Line point-to-point sailing schedules: service loop, port cut-off, ETD/ETA, transit days, vessel/voyage. Give port names, no login, no browser.
Pricing
from $2.00 / 1,000 sailing scrapeds
Rating
0.0
(0)
Developer
Arman Hossain
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Evergreen Sailing Schedules: Cut-offs & ETD/ETA

Pulls Evergreen Line's point-to-point sailing schedules straight from its own booking site: service loop, port cut-off, estimated departure and arrival, transit days, and the vessel and voyage working the leg. Give an origin and destination as ordinary port or city names; Evergreen's own internal location codes (not UN/LOCODEs) are resolved for you.
Agent skill: SKILL.md
https://api.apify.com/v2/key-value-stores/t7YoTxpZEJOWvw4Ug/records/evergreen-sailing-schedules-scraper.md
What you get
| Field | What it holds |
|---|---|
routeRequested | The route as you wrote it, "Origin > Destination" |
originCode, destinationCode | Evergreen's own 5-character location codes for the lane |
originLabel, destinationLabel | The port name used for the query, upper-cased |
recordNo | Row number in Evergreen's own results table for this search |
placeOfReceipt, portOfLoading | Where cargo is received and where it's loaded |
portCutOffDate | Port cut-off date and time for the sailing |
service | The loop/service code, e.g. FAL3 |
portOfDischarge, placeOfDelivery | Where the container is discharged and delivered |
transitDays | Total transit time, in days |
departureDate, arrivalDate | ETD at the port of loading, ETA at the port of discharge |
vesselVoyage | Vessel name and voyage number working the leg |
vgmHardCopyCutOff, vgmEdiCutOff | VGM cut-off, by hard copy and by EDI/WEB/APP, when Evergreen publishes one |
routingDetailSeq | The sequence ID Evergreen uses for this sailing's full routing detail |
remark | Any remark Evergreen attaches to the sailing, or null |
searchedDepartureDate, durationWeeks | The date window this record was found in |
scrapedAt | Run timestamp |
RUN_SUMMARY in the key-value store holds per-run counts, the filters you used, and
any route that failed to resolve or fetch.
Use cases
- Rate quoting. Pull the next sailings on a lane before quoting a customer, with cut-off and transit time in hand.
- Loop/alliance tracking. The
servicefield names the loop, so runs over time build a picture of which vessels rotate through which loop. - Multi-carrier schedule comparison. Evergreen is one of a shrinking number of top-10 carriers still reachable this way; join its sailings against other carrier Actors on lane and departure week.
- Cut-off reminders. Watch
portCutOffDateandvgmEdiCutOfffor lanes you book often and alert before they pass. - Transit-time benchmarking. Compare
transitDaysacross loops on the same lane to see which service is actually faster this quarter.
Quick start
The default lane, the next 4 weeks:
{"routes": ["Shanghai > Rotterdam"]}
Several lanes, a wider window, sorted by transit time:
{"routes": ["Shanghai > Rotterdam", "Kaohsiung > Los Angeles", "Hamburg > New York"],"durationWeeks": 8,"sortBy": "TRANSDAY","sortOrder": "ASC"}
A specific departure date, reefer service only:
{"routes": ["Shanghai > Rotterdam"],"departureDate": "2026-09-15","durationWeeks": 4,"reeferCargo": true}
Input
| Field | Type | Default | Notes |
|---|---|---|---|
routes | array | ["Shanghai > Rotterdam"] | One lane per entry, written "Origin > Destination" as port or city names. A 5-character Evergreen code works too if you already know it. |
departureDate | string | today | Earliest sailing to include, YYYY-MM-DD. Empty means today, on the Actor's server clock. |
durationWeeks | integer | 4 | How many weeks ahead of departureDate to search. Clamped to 1-12. |
sortBy | string | "LINE" | LINE (service loop), TRANSDAY (transit time), POLDEP (loading departure) or PODARR (discharge arrival). |
sortOrder | string | "ASC" | ASC or DESC. |
reeferCargo | boolean | false | Restrict to sailings that carry reefer cargo on this lane. |
maxSailingsPerRoute | integer | 50 | Cap on sailings saved, and charged for, per route. Clamped to 1-200. |
Nothing is required. Running with no input returns Shanghai to Rotterdam sailings for the next 4 weeks.
Output example
A real record:
{"routeRequested": "Shanghai > Rotterdam","originCode": "CNSHG","destinationCode": "NLRDM","originLabel": "SHANGHAI","destinationLabel": "ROTTERDAM","recordNo": 1,"placeOfReceipt": "SHANGHAI","portOfLoading": "SHANGHAI","portCutOffDate": "AUG-19-2026 12:00","service": "FAL3","portOfDischarge": "ROTTERDAM","placeOfDelivery": "ROTTERDAM","transitDays": 36,"departureDate": "AUG-22-2026","arrivalDate": "SEP-27-2026","vesselVoyage": "CMA CGM JACQUES SAADE 0FMMQW1MA","vgmHardCopyCutOff": null,"vgmEdiCutOff": "AUG-18-2026 17:00","routingDetailSeq": 21,"remark": null,"searchedDepartureDate": "2026-08-22","durationWeeks": 4,"scrapedAt": "2026-08-22T09:14:03.187Z"}
Evergreen sails partner-line vessels on its own loops, so vesselVoyage naming another
carrier (as above) is expected, not an error, the service loop code is Evergreen's.
Writing a route
routes entries read "Origin > Destination":
| You write | Actor resolves to |
|---|---|
"Shanghai > Rotterdam" | oriLocation=CNSHG, desLocation=NLRDM |
"Kaohsiung > Los Angeles" | oriLocation=TWKSG, desLocation=USLAX |
"CNSHG > NLRDM" | Used directly, any 5-character token skips the name lookup |
Evergreen's location codes are its own, not UN/LOCODEs: Kaohsiung is TWKSG, not
TWKHH; Rotterdam is NLRDM, not NLRTM. A name that Evergreen's own location search
can't match (a typo, or a place it doesn't book) is recorded in RUN_SUMMARY.failures
with stage: "resolve-location", and the run continues with whatever routes did
resolve.
API example
curl -X POST "https://api.apify.com/v2/acts/arman-bd~evergreen-sailing-schedules-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"routes": ["Shanghai > Rotterdam"],"durationWeeks": 4}'
JavaScript example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('arman-bd/evergreen-sailing-schedules-scraper').call({routes: ['Shanghai > Rotterdam', 'Hamburg > New York'],durationWeeks: 6,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const s of items) {console.log(`${s.routeRequested} · ${s.service} · ${s.vesselVoyage} · ETD ${s.departureDate} → ETA ${s.arrivalDate} (${s.transitDays}d)`);}
Notes
- Evergreen does not paginate this endpoint:
durationWeeksis the only window control, and every sailing in that window comes back in one page.maxSailingsPerRoutebounds what's kept and charged for on a busy lane or a wide window. - A route with no sailings in the window (a self-loop, or a lane Evergreen doesn't
run) comes back as zero records for that route, not an error. Only a route that
fails to resolve or fetch lands in
RUN_SUMMARY.failures. - Dates and times are kept exactly as Evergreen displays them (
AUG-22-2026,AUG-18-2026 17:00), not converted to ISO, since the site's own format is what a booking desk expects to match against. vgmHardCopyCutOffandvgmEdiCutOffarenullon a sailing where Evergreen has not published that cut-off yet, which is common further out in the window.- The same lane listed twice, in any case, is charged once.
- Requests are spaced out between routes and between location look-ups, so a run with several routes takes some seconds even though each route itself is a single request.
FAQ
Do I need an Evergreen or ShipmentLink account? No. You supply no credentials.
Can I use a UN/LOCODE? No, Evergreen's internal codes are its own scheme and differ from UN/LOCODEs for some ports (Rotterdam, Kaohsiung, and others). Write the port name instead and let the Actor resolve it, or pass Evergreen's own code if you already have it.
How far ahead can I search? durationWeeks goes up to 12 from departureDate.
For a date further in the future than that, set departureDate closer to it and run
again.
Does it fetch the leg-by-leg routing detail (transshipment ports)? Not the full
per-leg breakdown, routingDetailSeq is the ID Evergreen uses for that sub-page, so
you can reference or fetch it yourself if you need the intermediate calls.
What if a port I search for has multiple matches (e.g. several towns named "Hamburg")? The Actor uses Evergreen's own best/first match for the name you gave. If that's the wrong one, use a more specific name (add the state or country) or pass Evergreen's 5-character code directly.
Can I plug it into something else? Yes. Apify API, the client libraries, webhooks, scheduled runs, dataset exports to JSON, CSV or Excel, or MCP. The output is structured JSON.