Europe Truck Dispatch Guard - Germany, Switzerland & France avatar

Europe Truck Dispatch Guard - Germany, Switzerland & France

Pricing

from $80.00 / 1,000 route-aware restriction decisions

Go to Apify Store
Europe Truck Dispatch Guard - Germany, Switzerland & France

Europe Truck Dispatch Guard - Germany, Switzerland & France

Route-aware 2026 truck-ban decisions for Germany, Switzerland, France, and cross-border journeys, with official sources and safer departure times.

Pricing

from $80.00 / 1,000 route-aware restriction decisions

Rating

0.0

(0)

Developer

Kamer Ozkan

Kamer Ozkan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Categories

Share

Europe Route-Aware Truck Dispatch Guard

Decide whether a truck can complete a supplied German, Swiss, or French route without entering a Sunday, public-holiday, night, regional, or seasonal driving-ban window. The Actor evaluates the full journey timeline, applies caller-supplied statutory exemptions, and returns route conflicts and safer departure alternatives together with the official legal basis.

This Actor is designed for dispatch agents, transport-management systems, freight forwarders, 3PL workflows, and delivery-promise automation.

Version 0.6 remains backward-compatible with country-specific workflows and adds country: "AUTO" for one combined DE-CH-FR route decision. Add route when the decision must cover the whole journey.

What the Actor answers

  • Is this vehicle within the statutory truck-ban scope?
  • Will a Sunday or StVO-listed public-holiday ban begin while the vehicle is moving?
  • Which German states does the supplied geometry cross, and at what estimated times?
  • Does a July-August Saturday window overlap a listed road span?
  • Will a Swiss route enter the nationwide 22:00-05:00 night ban or a Sunday/holiday window?
  • Will a French route overlap the ordinary weekend ban, a 2026 summer/winter window, or an Île-de-France directional restriction?
  • Which supported countries does a cross-border route enter, and what is the joint legal departure?
  • Does maintained temporary-order evidence cover the complete journey?
  • Does a cargo, combined-transport, operational, military, or permit exemption apply?
  • What is the first later route departure with no evaluated conflict?
  • Is there an earlier exclusive deadline that clears the route before the restriction?
  • Which rule and official source produced the decision?

Every result uses one of four decisions:

  • ALLOWED - no evaluated prohibition remains.
  • PROHIBITED - a definite statutory prohibition applies.
  • CONDITIONAL - missing route facts or an exemption document must be verified.
  • ERROR - this query could not be validated.

Important scope

The Actor contains three independently versioned rule sets:

  • DE-2026.07.26-v2.2 for Germany;
  • CH-2026.07.26-v1.1 for Switzerland;
  • FR-2026.07.26-v1.1 for France.

Every departure and estimated route arrival must fall inside 2026. Dates outside the versioned rule period fail with ERROR; the Actor never silently reuses annual rules for another year.

Germany coverage:

  • StVO § 30 Sunday and listed public-holiday restrictions.
  • Regional StVO holiday scope for Corpus Christi, Reformation Day, and All Saints' Day.
  • The 1 July-31 August Saturday restriction on the road list published by the German Federal Ministry of Transport on 1 July 2026.
  • GeoJSON LineString or precision-5/6 encoded-polyline routes.
  • Supplied OSRM, Google Routes, HERE Routing v8, and TomTom Routing responses.
  • Per-coordinate-segment durations and planned intermediate stops.
  • State visits detected from Eurostat GISCO NUTS 2024 boundaries.
  • Routing-provider road spans matched to operational representations of all listed 2026 summer corridors.
  • Statutory exemptions represented by explicit caller assertions.

Switzerland coverage:

  • The VRV heavy-vehicle night ban from 22:00 to 05:00.
  • Sundays and VRV-listed holidays, including the special 26 December condition.
  • Explicit handling of the rule that a listed holiday does not apply where it is not observed; use swissHolidayObserved to resolve the canton/canton-part fact.
  • Heavy trucks over 3.5 t, articulated combinations over 5 t, and vehicles towing a trailer over 3.5 t.
  • Zero-emission excess-weight allowances and caller-asserted Art. 91a exemptions.
  • The broadened live-animal, one-day perishable-goods, and infrastructure-maintenance exemptions effective 1 July 2026.
  • Swiss route entry/exit detection from a generalized GISCO 2024 country boundary.

France coverage:

  • Goods vehicles or combinations over 7.5 tonnes, with explicit specialized/agricultural exclusions.
  • The nationwide Saturday/holiday-eve 22:00 start and Sunday/public-holiday 22:00 end rules.
  • The official 2026 nationwide summer Saturday dates from 07:00 to 19:00.
  • The official 2026 Auvergne-Rhône-Alpes winter Saturday dates from 07:00 to 18:00, with fail-closed restricted-network usage.
  • Permanent directional Île-de-France windows on the listed A6A/A6B/A106/A6/A10/A13/A12 sections; Article 4 exemptions are not applied to these windows.
  • Caller-asserted Article 4 categories and prefectural derogations, always requiring documentary review.
  • French country, Île-de-France, and Auvergne-Rhône-Alpes detection from generalized GISCO 2024 boundaries.
  • Automatic negative resolution of the regional road lists when complete non-inferred roadSpans prove that no listed road is used.

Cross-border coverage:

  • country: "AUTO" detects Germany, Switzerland, and France from one route and returns a conservative combined decision plus countryAssessments.
  • The next legal departure is searched jointly across every detected supported country.
  • A route that enters none of the supported countries fails instead of guessing.

Temporary orders:

  • temporaryOrderCheck accepts evidence from a maintained official-order feed as VERIFIED_CLEAR, APPLICABLE_PROHIBITION, or APPLICABLE_EXEMPTION.
  • VERIFIED_CLEAR must cover the departure through estimated arrival.
  • Without journey-wide clearance, an otherwise ALLOWED in-scope movement becomes CONDITIONAL, and unverified later-departure suggestions are withheld.

It does not yet:

  • calculate a route from coordinates;
  • map-match raw geometry to road names by itself;
  • call routing providers or fetch live traffic itself;
  • calculate legally required EU driver working/rest periods;
  • verify permits or cargo documents;
  • fetch live road closures, environmental zones, or temporary orders itself;
  • cover European countries other than Germany, Switzerland, and France.

The Actor deliberately returns CONDITIONAL instead of guessing when those facts matter. Connect your own official-order monitor through temporaryOrderCheck for operational use.

Real decisions from live runs

Both records below are unedited output from live runs on 2026-07-28.

A Sunday-window departure is refused with the statute attached. Every restriction carries its certainty level and an official source with URL, section, and access date, so a dispatcher or an agent can audit the refusal instead of trusting it:

{
"queryId": "freiburg-geneva-lyon-auto",
"country": "AUTO",
"decision": "PROHIBITED",
"departureTime": "2026-07-13T21:00:00+02:00",
"nextLegalDeparture": null,
"subjectToTruckBanRules": true,
"routeStates": [
"DE-BW"
],
"restrictions": [
{
"code": "CH_VRV_91_NIGHT_BAN",
"title": "Swiss heavy-vehicle night driving ban",
"certainty": "DEFINITE",
"startsAt": "2026-07-13T22:00:00+02:00",
"endsAt": "2026-07-14T05:00:00+02:00",
"affectedStates": [],
"affectedRoads": [],
"explanation": "The Swiss heavy-vehicle night driving ban applies from 22:00 to 05:00.",
"source": {
"title": "Federal Roads Office (ASTRA) - Sunday and night journeys",
"url": "https://www.astra.admin.ch/de/sonntags-und-nachtfahrten",
"section": "General 22:00-05:00 night ban and Sunday ban",
"accessedOn": "2026-07-26"
}
},
{
"code": "FR_ART1_HOLIDAY_NATIONAL_DAY",
"title": "French National Day French goods-vehicle driving ban",
"certainty": "DEFINITE",
"startsAt": "2026-07-14T00:00:00+02:00",
"endsAt": "2026-07-14T22:00:00+02:00",
"affectedStates": [],
"affectedRoads": [],
"explanation": "French National Day is a national French public holiday; the nationwide restriction applies from 00:00 to 22:00.",
"source": {
"title": "French order of 16 April 2021 on goods-vehicle driving restrictions",
"url": "https://www.legifrance.gouv.fr/loda/id/JORFTEXT000043416004/",
"section": "Articles 1-5 and Annexes I-III",
"accessedOn": "2026-07-26"
}
}
],
"exemptionsApplied": [],
"warnings": [
"[DE] State crossings use generalized NUTS 2024 boundaries and may differ slightly near borders.",
"[DE] route.roadSpansComplete is not true. Summer-road coverage may require manual review.",
"[CH] Swiss entry and exit points use a generalized GISCO 2024 country boundary and may differ slightly near borders.",
"[FR] French country and regional entry/exit points use generalized GISCO 2024 boundaries and may differ slightly near borders.",
"No temporary-order clearance covers the complete journey. A competent authority or maintained live-order feed must verify temporary bans and exemptions."
],
"manualReviewRequired": true,
"routeAnalysis": "(routeAnalysis, shortened here)",
"journeyConflicts": "(journeyConflicts, shortened here)",
"departureOptions": [],
"ruleSetVersion": "DE-2026.07.26-v2.2 + CH-2026.07.26-v1.1 + FR-2026.07.26-v1.1",
"evaluatedAt": "2026-07-28T13:47:48.897Z",
"error": null,
"ruleValidity": {
"validFrom": "2026-01-01T00:00:00+01:00",
"validThrough": "2026-12-31T23:59:59.999+01:00",
"journeyCovered": true
},
"countryAssessments": "(countryAssessments, shortened here)",
"temporaryOrderAssessment": {
"status": "NOT_VERIFIED",
"clearanceCoversJourney": false,
"checkedAt": null,
"validFrom": null,
"validThrough": null,
"authority": null,
"referenceUrl": null
}
}

The same route on a Tuesday morning hits no statutory ban, and the Actor still does not hand out a naked green light. It returns CONDITIONAL with zero restrictions, names exactly what remains unverified (generalized border geometry, incomplete road spans, temporary orders), and sets manualReviewRequired accordingly. When the answer depends on evidence the Actor does not have, it says so:

{
"queryId": "freiburg-geneva-lyon-tuesday-morning",
"country": "AUTO",
"decision": "CONDITIONAL",
"departureTime": "2026-07-28T10:00:00+02:00",
"nextLegalDeparture": null,
"subjectToTruckBanRules": true,
"routeStates": [
"DE-BW"
],
"restrictions": [],
"exemptionsApplied": [],
"warnings": [
"[DE] State crossings use generalized NUTS 2024 boundaries and may differ slightly near borders.",
"[DE] route.roadSpansComplete is not true. Summer-road coverage may require manual review.",
"[CH] Swiss entry and exit points use a generalized GISCO 2024 country boundary and may differ slightly near borders.",
"[FR] French country and regional entry/exit points use generalized GISCO 2024 boundaries and may differ slightly near borders.",
"No temporary-order clearance covers the complete journey. A competent authority or maintained live-order feed must verify temporary bans and exemptions."
],
"manualReviewRequired": true,
"routeAnalysis": {
"distanceKm": 350.46,
"durationMinutes": 330,
"estimatedArrivalTime": "2026-07-28T15:30:00+02:00",
"detectedCountries": [
"DE",
"CH",
"FR"
],
"countryVisits": "(per-border entry and exit timestamps, shortened here)"
},
"journeyConflicts": [],
"departureOptions": [],
"ruleSetVersion": "DE-2026.07.26-v2.2 + CH-2026.07.26-v1.1 + FR-2026.07.26-v1.1",
"evaluatedAt": "2026-07-28T21:22:18.361Z",
"error": null,
"ruleValidity": {
"validFrom": "2026-01-01T00:00:00+01:00",
"validThrough": "2026-12-31T23:59:59.999+01:00",
"journeyCovered": true
},
"countryAssessments": "(countryAssessments, shortened here)",
"temporaryOrderAssessment": {
"status": "NOT_VERIFIED",
"clearanceCoversJourney": false,
"checkedAt": null,
"validFrom": null,
"validThrough": null,
"authority": null,
"referenceUrl": null
}
}

This Actor is also exposed to AI agents through Apify's MCP server (mcp.apify.com): an agent can discover it by search and run it with the same pay-per-event billing, with no separate integration.

Input

Pass one or more queries in a queries array. Batch queries reduce Actor startup cost.

{
"queries": [
{
"queryId": "a8-journey-crosses-summer-ban",
"country": "DE",
"departureTime": "2026-07-11T04:30:00+02:00",
"vehicle": {
"isTruck": true,
"maximumPermissibleWeightTonnes": 18,
"hasTrailer": true
},
"transport": {
"isCommercialOrPaidGoodsTransport": true,
"cargoCategory": "GENERAL"
},
"route": {
"geometry": {
"type": "LineString",
"coordinates": [
[8.44, 48.97],
[9.11, 48.79],
[10.03, 48.45],
[10.83, 48.36],
[11.47, 48.18]
]
},
"segmentDurationsMinutes": [45, 55, 80, 60],
"plannedStops": [
{
"coordinateIndex": 2,
"durationMinutes": 30,
"label": "Driver break"
}
],
"roadSpans": [
{
"roadRef": "A8",
"startCoordinateIndex": 0,
"endCoordinateIndex": 4
}
],
"roadSpansComplete": true
},
"includeNextLegalDeparture": true
}
]
}

Times without a UTC offset are interpreted in Europe/Berlin for Germany, Europe/Zurich for Switzerland, and Europe/Paris for France.

Use country: "AUTO" only with a route. The geometry is evaluated against all supported countries and the strictest country result wins.

Temporary-order evidence

An annual calendar cannot prove that a temporary authority order does not apply. Supply a check created by your maintained official-order workflow:

{
"status": "VERIFIED_CLEAR",
"checkedAt": "2026-07-13T20:55:00+02:00",
"validFrom": "2026-07-13T20:00:00+02:00",
"validThrough": "2026-07-14T06:00:00+02:00",
"authority": "Name of the competent authority or maintained feed",
"referenceUrl": "https://authority.example/order-register"
}

Do not mark a check VERIFIED_CLEAR unless its source covers every relevant jurisdiction and the complete journey interval. Applicable exemptions always remain CONDITIONAL pending documentary review.

Route geometry and timing

Supply exactly one route representation:

  • route.geometry: GeoJSON LineString coordinates in [longitude, latitude] order;
  • route.encodedPolyline: Google-style encoded polyline, with polylinePrecision set to 5 or 6;
  • route.providerRoute: an already-fetched OSRM, Google Routes, HERE Routing v8, or TomTom response.

For raw geometry, choose one timing model:

  • durationMinutes: backward-compatible fallback distributed proportionally over route distance;
  • segmentDurationsMinutes: one non-negative value for every pair of consecutive coordinates. This is the preferred model for traffic-aware or provider-derived timestamps.

If both are supplied, durationMinutes must equal the segment-duration sum. The total journey, including stops, may not exceed 10,080 minutes.

Add plannedStops to delay subsequent movement:

{
"coordinateIndex": 2,
"durationMinutes": 30,
"label": "Driver break"
}

A stop must reference an intermediate coordinate. Stationary time shifts later state and road arrival times but is excluded from the moving intervals checked against driving bans.

Routing-provider adapters

The Actor normalizes supplied provider responses locally; it does not call a paid routing API or require API keys.

{
"providerRoute": {
"provider": "OSRM",
"routeIndex": 0,
"polylinePrecision": 5,
"response": {
"code": "Ok",
"routes": []
}
}
}

Supported provider values:

  • OSRM: step geometry, step duration, and structured ref values;
  • GOOGLE_ROUTES: route/step polylines and duration strings. Road numbers extracted from navigation text remain inferred, so summer-road decisions stay CONDITIONAL without explicit structured spans;
  • HERE_ROUTING_V8: flexible polylines, section durations, and spans[].routeNumbers;
  • TOMTOM_ROUTING: Orbis/v2 leg paths or polylines, leg durations, and indexed instruction road numbers.

Request full step/section geometry and road-number fields from the provider when a definite summer-road decision is required. Caller-supplied roadSpans, segment durations, and aggregate duration override adapter-derived values.

Road spans

Raw geometry does not prove which of two nearby or parallel roads the vehicle uses. For a definite summer-road decision, provide ordered routing-provider metadata:

{
"roadRef": "A8",
"startCoordinateIndex": 0,
"endCoordinateIndex": 4
}

Set roadSpansComplete: true only when the spans cover the full coordinate sequence without gaps. Geometry without complete road-span coverage remains CONDITIONAL during a summer Saturday window instead of producing an unsafe ALLOWED.

For B31 and B96, also set outsideBuiltUpArea: true on the relevant span when the matched part is confirmed to be outside built-up areas.

German state codes

Use ISO 3166-2 codes:

DE-BW, DE-BY, DE-BE, DE-BB, DE-HB, DE-HH, DE-HE, DE-MV, DE-NI, DE-NW, DE-RP, DE-SL, DE-SN, DE-ST, DE-SH, DE-TH.

Swiss vehicle and exemption fields

For the common heavy-truck case, maximumPermissibleWeightTonnes > 3.5 is sufficient. Lighter towing or articulated combinations should also supply:

  • vehicle.isArticulated;
  • vehicle.maximumPermissibleCombinationWeightTonnes;
  • vehicle.trailerMaximumPermissibleWeightTonnes.

For the narrow zero-emission excess-weight exemption, assert both hasZeroEmissionDrive and excessWeightOnlyDueToZeroEmissionDrive.

transport.swissExemptionCategory accepts:

  • NONE
  • PERSON_TRANSPORT
  • AGRICULTURE_OR_FORESTRY
  • EMERGENCY_CUSTOMS_OR_MILITARY
  • POSTAL_BASIC_SERVICE
  • QUALIFYING_PERISHABLE_FOOD
  • LIVE_ANIMALS
  • PERISHABLE_WITHIN_ONE_DAY
  • NEWS_OR_CURRENT_REPORTING
  • BREAKDOWN_OR_WINTER_SERVICE
  • INFRASTRUCTURE_OR_PUBLIC_SPACE_MAINTENANCE

These values are caller assertions. Categories whose factual or documentary conditions cannot be verified from input produce CONDITIONAL.

On a listed Swiss holiday, set swissHolidayObserved: true only when the day is observed in the affected canton or canton part; set it to false when it is not. Omit it for a fail-closed CONDITIONAL.

French vehicle, regional-route, and exemption fields

Set transport.isGoodsTransport when the movement is goods transport but is not accurately described by isCommercialOrPaidGoodsTransport. If omitted, the existing commercial/paid-goods flag is used.

vehicle.franceVehicleCategory accepts:

  • STANDARD_GOODS
  • SPECIALIZED
  • AGRICULTURAL

For a listed 2026 winter Saturday, set franceUsesRestrictedWinterNetwork: true only when the route uses one of the Auvergne-Rhône-Alpes sections in the annual order. Set it to false after route verification. A route entering that region without this assertion stays CONDITIONAL during the 07:00-18:00 window.

For permanent Île-de-France motorway restrictions, use:

  • franceIleDeFranceRestrictedRoadUsage;
  • franceIleDeFranceDirection: PARIS_TO_PROVINCE or PROVINCE_TO_PARIS.

Geometry detects entry into Île-de-France, but it cannot by itself prove use of the legally listed part of a parallel motorway or the legal direction. Complete structured road spans can prove that no listed road is used. If a listed road is present but direction is missing, the result remains CONDITIONAL. Article 4 exemptions do not override these particular motorway windows.

transport.franceExemptionCategory accepts:

  • NONE
  • LIVE_ANIMALS_OR_PERISHABLES
  • AGRICULTURAL_HARVEST
  • AUTHORIZED_EVENT
  • PRESS_OR_ELECTION_MATERIAL
  • OFFICE_OR_FACTORY_RELOCATION
  • MOBILE_SALE
  • FAIR_OR_MARKET
  • AIR_FREIGHT
  • HEALTHCARE_OR_MEDICAL
  • INDUSTRIAL_GAMMAGRAPHY
  • EMERGENCY_NETWORK_REPAIR
  • TRANSPORT_INFRASTRUCTURE_SAFETY
  • QUALIFYING_FUEL_SUPPLY
  • QUALIFYING_WASTE_COLLECTION

French exemptions depend on cargo, loading, geographic, timing, or document conditions the Actor cannot independently verify, so an asserted category returns CONDITIONAL and identifies the evidence that must be checked.

Cargo categories

  • GENERAL
  • FRESH_MILK_OR_DAIRY
  • FRESH_MEAT
  • FRESH_OR_LIVE_FISH
  • PERISHABLE_FRUIT_OR_VEGETABLES
  • SPECIFIED_ANIMAL_BYPRODUCTS
  • LIVE_BEES
  • RECOVERY_TOW_OR_BREAKDOWN
  • EMPTY_RUN_RELATED_TO_EXEMPT_TRANSPORT
  • FEDERAL_REQUISITION
  • AUTHORIZED_MILITARY_TRANSPORT

Cargo categories are caller assertions. Carry and verify the legally required freight and supporting documents.

Legacy departure-only mode

Queries without route continue to support routeStates, routeRoads, and routeIncludesRestrictedSummerSegment.

  • Set routeIncludesRestrictedSummerSegment: true only after route geometry confirms a listed section.
  • Set it to false only after confirming that no listed section is used.
  • Omit it to receive a safe CONDITIONAL decision when a listed road might match.

Output

{
"queryId": "a8-journey-crosses-summer-ban",
"country": "DE",
"decision": "PROHIBITED",
"departureTime": "2026-07-11T04:30:00+02:00",
"nextLegalDeparture": "2026-07-11T20:00:00+02:00",
"subjectToTruckBanRules": true,
"routeStates": ["DE-BW", "DE-BY"],
"restrictions": [
{
"code": "DE_FERREISEV_SUMMER_SATURDAY",
"certainty": "DEFINITE",
"startsAt": "2026-07-11T07:00:00+02:00",
"endsAt": "2026-07-11T20:00:00+02:00",
"source": {
"url": "https://www.bmv.de/SharedDocs/DE/Artikel/StV/Strassenverkehr/lkw-fahrverbot-in-der-ferienreisezeit.html"
}
}
],
"routeAnalysis": {
"distanceKm": 241.72,
"durationMinutes": 270,
"drivingDurationMinutes": 240,
"plannedStopDurationMinutes": 30,
"timingMethod": "SEGMENT_DURATIONS",
"estimatedArrivalTime": "2026-07-11T09:00:00+02:00",
"detectedStates": ["DE-BW", "DE-BY"],
"detectedSummerSegments": [
{
"road": "A8",
"certainty": "DEFINITE"
}
]
},
"journeyConflicts": [
{
"restrictionCode": "DE_FERREISEV_SUMMER_SATURDAY",
"conflictAt": "2026-07-11T07:00:00+02:00",
"road": "A8"
}
],
"departureOptions": [
{
"type": "DEPART_BEFORE",
"time": "2026-07-11T03:00:00+02:00",
"inclusive": false
},
{
"type": "DEPART_AT_OR_AFTER",
"time": "2026-07-11T20:00:00+02:00",
"inclusive": true
}
],
"exemptionsApplied": [],
"manualReviewRequired": false,
"ruleSetVersion": "DE-2026.07.26-v2.2"
}

Official sources

Run locally

npm install
npm run build
npm test
npm run rules:audit
npm run release:check

rules:audit fetches seven primary German, Swiss, and French official sources, compares semantic fingerprints, verifies required legal anchors, and diffs the complete German summer road list. It exits non-zero with CHANGED or UNREACHABLE, making it suitable for a scheduled CI or Apify maintenance monitor. A detected change is an alert for human legal review; it never rewrites the rule set automatically.

To run through local Apify storage:

mkdir -p storage/key_value_stores/default
cp examples/input.json storage/key_value_stores/default/INPUT.json
npm start

Results are written to the local default dataset.

Pay per event

The publish bundle defines two custom events in .actor/pay_per_event.json:

  • restriction-check: $0.02 for a validated departure-only result;
  • route-restriction-check: $0.08 for a validated route-aware result, including AUTO.

The Actor saves and charges each successful result in one Actor.pushData call and stops when the user's charge limit is reached.

Invalid input rows are returned as ERROR results without the custom event charge.

Disclaimer

This Actor provides automated decision support, not legal advice or a permit to drive. State boundaries are generalized, summer corridors are operational matching geometry, and timing quality depends on the supplied route data. Before dispatch, verify route geometry, road-span metadata, temporary orders, official permits, vehicle classification, cargo classification, and supporting documents with the responsible authority or qualified transport-compliance professional.