# U-Haul Truck Rental Quotes \[$10/1K💰] | Rates | Fees (`ahmed_jasarevic/uhaul-rental-quotes`) Actor

Get live U-Haul truck and van quotes for any route and date: one-way and in-town rates, fees, included miles and days, extra-mile rates, availability and truck specs.

- **URL**: https://apify.com/ahmed_jasarevic/uhaul-rental-quotes.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## U-Haul Truck Rental Quotes & Availability

Get live U-Haul truck and cargo van rental quotes for any route and date — in-town or one-way — with per-vehicle rates, fees, included days and miles, extra-mile and extra-day rates, availability and truck specs.

This Apify Actor uses U-Haul's own search flow (HTTP only, no browser) and reads the server-rendered `DataJson` quote payload from `uhaul.com` — the same data U-Haul uses to render its quote page. That makes it far faster than browser-based scrapers. A US proxy is required because U-Haul blocks many datacenter and non-US IPs; Apify Proxy with `apifyProxyCountry: "US"` is the default.

### Compare & Track Moving Costs

- **Moving cost comparison** — quote the same route across every truck size to pick the cheapest option.
- **One-way move budgeting** — get the flat trip rate, included days and miles, and the cost of going over.
- **In-town rental pricing** — pull the daily base rate plus the per-mile charge for local moves.
- **Route price monitoring** — schedule runs and compare rows over time to catch rate drops before booking or track a market.
- **Fleet and availability research** — see every vehicle U-Haul lists for a route, including ones marked "not available".

### How It Works

![How the U-Haul Scraper works: route and date inputs become vehicle quote rows with rates, fees, included miles and availability.](https://api.apify.com/v2/key-value-stores/oeuA0kLOyhbRM4fzt/records/how-it-works-uhaul-rental-quotes)

The Actor builds in-town or one-way routes from ZIP codes, cities or a U-Haul search URL, then calls the rates endpoint through a required US proxy. It reads the server-rendered `DataJson` payload and processes routes in parallel.

Each row covers one vehicle per route with base rate, fees, total including fees, included days and miles, extra-day and extra-mile rates, availability, discounts and specs. A summary record is saved to the key-value store.

1. The route is built from `pickupLocation`, optional `dropoffLocation` and `pickupDate`, or read from a `searchUrl` query string.
2. The Actor calls U-Haul's rates endpoint (`/Reservations/RatesTrucks/`) using a US proxy.
3. It reads the server-rendered `DataJson` payload containing the quoted vehicles.
4. Each vehicle becomes one dataset row with rate, fees, included days/miles, extra rates, availability and specs.
5. A `SUMMARY` record with route and quote counts is saved to the default key-value store.

Routes are processed in parallel, so a batch finishes in roughly the time of its slowest few routes rather than the sum of all routes.

### Input Parameters

| Field | Type | Required | Default | Notes |
| --- | --- | --- | --- | --- |
| `searchUrl` | string | No | — | A uhaul.com URL containing the route in its query string. Used when `pickupLocation` is empty. |
| `pickupLocation` | string | No | — | ZIP code, city/state, or address. |
| `dropoffLocation` | string | No | — | Empty = in-town rental. Set for one-way. |
| `pickupDate` | string | No | — | `MM/DD/YYYY` or `YYYY-MM-DD`. Defaults to 7 days from today. |
| `routes` | array | No | — | Additional routes, one per entry: `pickup\|dropoff\|date`, or a full uhaul.com search URL. Dropoff and date are optional. |
| `includeUnavailable` | boolean | No | `true` | Include vehicles U-Haul marks unavailable. |
| `maxItems` | integer | No | `100` | Maximum quote rows to save. |
| `proxyConfiguration` | object | No | Apify Proxy, US | Apify Proxy config (`useApifyProxy`, `apifyProxyCountry: "US"`). |

If `pickupLocation` is empty, the Actor uses `searchUrl`. When both are filled, `pickupLocation` / `dropoffLocation` / `pickupDate` take precedence. U-Haul typically accepts pickup dates up to about 11 months ahead.

### Output Fields

One dataset item per vehicle per route:

`tripType` (`in_town` or `one_way`), `pickupLocation`, `dropoffLocation`, `pickupDate`, `pickupDateUS`, `originCity`, `originState`, `originMco`, `destinationCity`, `destinationState`, `destinationMco`, `vehicleCode`, `vehicleName`, `vehicleDescription`, `capacity`, `isAvailable`, `availabilityText`, `rate`, `rateType`, `rateIncludingFees`, `feesTotal`, `fees`, `mileageRate`, `weekendMileageRate`, `extraDayRate`, `extraMileRate`, `includedDays`, `includedMiles`, `allowedDays`, `allowedMiles`, `expectedArrivalDate`, `hasDiscount`, `discountDescription`, `rateBeforeDiscount`, `savings`, `bestRate`, `specs`, `specsRaw`, `sourceUrl`, `sourceTitle`, `fetchedAt`.

Note: `rate` is the base vehicle rate — a **daily** rate plus per-mile charges for in-town rentals, or the **trip total** for one-way rentals. `rateIncludingFees` adds listed mandatory fees but not taxes.

### Example Input

In-town rental:

```json
{
  "pickupLocation": "78701",
  "pickupDate": "2026-11-10"
}
```

One-way move:

```json
{
  "pickupLocation": "78701",
  "dropoffLocation": "75201",
  "pickupDate": "2026-11-10"
}
```

Batch of routes:

```json
{
  "pickupLocation": "78701",
  "pickupDate": "2026-11-10",
  "routes": [
    "78701|75201|2026-11-10",
    "78701|77001|2026-11-10",
    "10001||2026-11-10"
  ]
}
```

### Example Output

```json
{
  "tripType": "one_way",
  "pickupLocation": "78701",
  "dropoffLocation": "75201",
  "pickupDate": "2026-11-10",
  "pickupDateUS": "11/10/2026",
  "originCity": "Austin",
  "originState": "TX",
  "originMco": "737",
  "destinationCity": "Dallas",
  "destinationState": "TX",
  "destinationMco": "733",
  "vehicleCode": "TM",
  "vehicleName": "10' Truck",
  "capacity": "Studio to 1 Bedroom Apt.",
  "isAvailable": true,
  "rate": 468,
  "rateIncludingFees": 473,
  "extraDayRate": 40,
  "extraMileRate": 1,
  "allowedDays": 3,
  "allowedMiles": 450,
  "hasDiscount": true,
  "rateBeforeDiscount": 520,
  "discountDescription": "10% Instant Online Savings",
  "expectedArrivalDate": "2026-11-13",
  "sourceUrl": "https://www.uhaul.com/Reservations/RatesTrucks/",
  "fetchedAt": "2026-10-20T12:00:00.000Z"
}
```

The dataset ships with three views — **Overview**, **Pricing details** and **Vehicle specs** — and a `SUMMARY` key-value record with route/quote counts. Dataset views are also available through the API, e.g. `.../items?view=pricing`.

### Automate Moving-Cost Monitoring With Schedules & Webhooks

- **Schedule daily or weekly runs** for the routes and dates you care about, keep the dataset, and compare rows over time.
- **Send results to Google Sheets, Zapier, Make or your own webhook** to build a pricing dashboard or trigger alerts on rate drops.
- **Read the dataset via the Apify REST API** to power a moving-cost calculator or market tool.
- Quotes are never cached or smoothed, so every scheduled run reflects the live price at that moment.

### Related Actors

- [U-Haul Truck Rental Quotes (alternative)](https://apify.com/aitorsm/uhaul-truck-rental-quotes) — an alternative U-Haul quote actor covering the same routes.
- [Cars.com Scraper](https://apify.com/ahmed_jasarevic/cars-com-scraper) — US vehicle listings to complement moving and transport research.
- [Autotrader Scraper](https://apify.com/ahmed_jasarevic/autotrader-scraper) — car and truck listings with prices and specs.
- [Boat Trader Scraper](https://apify.com/ahmed_jasarevic/boattrader-scraper) — marine listings for transport and relocation research.
- [Google Flights Scraper](https://apify.com/ahmed_jasarevic/google-flights-scraper) — compare travel costs alongside a move.

### Frequently Asked Questions

#### Why use this Actor instead of the official U-Haul API?

U-Haul does not publish a public developer API or portal — there is no documented REST or GraphQL API for third-party developers. This Actor reads the same `DataJson` payload U-Haul embeds in its rates page, so you get the site's own quote numbers programmatically.

#### What are alternatives to scraping U-Haul?

Alternatives include manually checking the uhaul.com quote page, or calling an unofficial maintained API wrapper. This Actor runs U-Haul's own search flow over plain HTTP, batches many routes in one run, and returns structured rows plus a summary.

#### Can I get both one-way and in-town prices?

Yes. Leave `dropoffLocation` empty for an in-town rental (daily base rate plus `mileageRate` per mile), or set it for a one-way move (flat trip total with `allowedDays` / `allowedMiles` included).

#### How current are the prices?

Prices are live and move during the day — U-Haul prices by demand and local inventory. Every row carries `fetchedAt`, and a stale price would be a wrong price, so quotes are never cached. Treat quotes as valid for that moment only.

#### Do I need a proxy?

Yes, a US proxy is required — U-Haul blocks many datacenter and non-US IPs. Apify Proxy with `apifyProxyCountry: "US"` is the default.

#### Are these reservations?

No. Quotes are not reservations, and availability and prices can change. U-Haul typically accepts pickup dates up to about 11 months ahead.

### For AI Agents & LLM Apps

Purpose: return live U-Haul truck and van quotes for one or many routes, one row per vehicle.

Minimal working input:

```json
{ "pickupLocation": "78701", "dropoffLocation": "75201", "pickupDate": "2026-11-10" }
```

In-town variant (omit dropoff):

```json
{ "pickupLocation": "78701", "pickupDate": "2026-11-10" }
```

Output fields: `tripType, pickupLocation, dropoffLocation, pickupDate, originCity, originState, destinationCity, destinationState, vehicleCode, vehicleName, capacity, isAvailable, rate, rateIncludingFees, mileageRate, extraDayRate, extraMileRate, allowedDays, allowedMiles, expectedArrivalDate, hasDiscount, rateBeforeDiscount, savings, fetchedAt`.

Behaviors an agent should know:

- `pickupLocation` / `dropoffLocation` / `pickupDate` **take precedence over** `searchUrl` when both are set; `searchUrl` is used only when `pickupLocation` is empty.
- `pickupDate` defaults to **7 days from today** if unset; `maxItems` defaults to **100**.
- `includeUnavailable` defaults to `true`, so rows with `isAvailable: false` and null prices are included unless disabled.
- Entries in `routes` are additional to the main route; duplicates are removed and routes are processed in parallel.
- A route with every vehicle unavailable still returns rows; the run fails only when no route could be quoted.
- Requires a US proxy (default Apify Proxy, US).
- Billing: pay-per-event — each `result` row is $0.01, plus a symbolic $0.00005 Actor-start event.

### Legal & Compliance Disclaimer

This is an independent Actor and is not affiliated with, endorsed by, or sponsored by U-Haul. It accesses only U-Haul's publicly available rates page and the `DataJson` payload it embeds — no login, account or reservation is required, and no access controls are used. Quotes are informational and are not reservations; availability and prices can change at any time. Users are responsible for complying with U-Haul's Terms of Service, robots directives and any other applicable law when using the data.

### SEO Keywords

u-haul quote, uhaul truck rental quote, truck rental prices, one-way truck rental cost, in-town truck rental, moving truck quote, cargo van rental, u-haul api, uhaul scraper, truck rental price comparison, moving cost estimate, truck rental availability, u-haul rates, moving truck rental data, rental quote api, diy moving cost, truck rental monitoring, relocation cost data, u-haul alternative, truck rental dataset

# Actor input Schema

## `searchUrl` (type: `string`):

Optional. Paste a uhaul.com URL that contains the route in its query string. Used when pickupLocation is empty. Supported parameters: PickupLocation (also pickup, from, origin), DropoffLocation (also dropoff, to, destination) and PickupDate (also date). If PickupDate is omitted, the date 7 days from today is used.

## `pickupLocation` (type: `string`):

ZIP code, city and state, or address where the truck is picked up. Example: 78701 or Austin, TX. When filled, it takes precedence over searchUrl.

## `dropoffLocation` (type: `string`):

Optional. Leave empty for an in-town rental. Set a ZIP code, city, or address for a one-way rental. Example: 75201.

## `pickupDate` (type: `string`):

Pickup date in MM/DD/YYYY or YYYY-MM-DD format. Leave empty to use the date 7 days from today. U-Haul accepts dates up to about 11 months ahead.

## `routes` (type: `array`):

Optional list of additional routes, processed in parallel. One route per line: pickupLocation|dropoffLocation|pickupDate. Dropoff and date are optional. A line can also be a full uhaul.com search URL. Examples: 78701, 78701|75201, 78701|75201|2026-11-10, 78701||2026-11-10, https://www.uhaul.com/Reservations/RatesTrucks/?pickup=78701\&date=2026-11-10.

## `includeUnavailable` (type: `boolean`):

Include vehicles that U-Haul marks as unavailable for the requested route.

## `maxItems` (type: `integer`):

Maximum number of quote rows to save in the dataset. Routes are scraped in parallel; any routes that cannot contribute more rows are skipped.

## `proxyConfiguration` (type: `object`):

U-Haul blocks many datacenter and non-US IPs. Keep Apify Proxy enabled with a US location, or provide your own US proxy.

## Actor input object example

```json
{
  "searchUrl": "https://www.uhaul.com/Reservations/RatesTrucks/?PickupLocation=78701&DropoffLocation=75201",
  "routes": [
    "78701|77001",
    "10001",
    "90012|94103",
    "33101|32801"
  ],
  "includeUnavailable": true,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `quotes` (type: `string`):

Default dataset with one item per vehicle per route. Includes rates, fees, availability, mileage terms and vehicle specs.

## `summary` (type: `string`):

Route counts, quote counts, timing and failures for this run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchUrl": "https://www.uhaul.com/Reservations/RatesTrucks/?PickupLocation=78701&DropoffLocation=75201",
    "routes": [
        "78701|77001",
        "10001",
        "90012|94103",
        "33101|32801"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/uhaul-rental-quotes").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchUrl": "https://www.uhaul.com/Reservations/RatesTrucks/?PickupLocation=78701&DropoffLocation=75201",
    "routes": [
        "78701|77001",
        "10001",
        "90012|94103",
        "33101|32801",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/uhaul-rental-quotes").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchUrl": "https://www.uhaul.com/Reservations/RatesTrucks/?PickupLocation=78701&DropoffLocation=75201",
  "routes": [
    "78701|77001",
    "10001",
    "90012|94103",
    "33101|32801"
  ]
}' |
apify call ahmed_jasarevic/uhaul-rental-quotes --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/uhaul-rental-quotes"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/XPl9M9CAJkb5Zm5lE/builds/wi2rA6D7rrGdIccbj/openapi.json
