# Great Guys Move Scraper (`muhammadafzal/great-guys-move-scraper`) Actor

Scrape ranked moving companies, scores, reviews, contacts, services, and USDOT status from Great Guys Moving by US city or state.

- **URL**: https://apify.com/muhammadafzal/great-guys-move-scraper.md
- **Developed by:** [Muhammad Afzal](https://apify.com/muhammadafzal) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 scraped mover or cities

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Great Guys Move Scraper

Extract ranked US moving companies and covered cities from Great Guys Moving into clean JSON, CSV, Excel, or API-ready dataset records. The Actor is designed for moving-industry lead research, competitor analysis, license checks, and local market discovery.

### What it extracts

Each company record can include the company name, overall score, rating tier, review/data-point counts, affordability index, address, phone, email, website, services, review-derived pros and cons, eleven quality-factor scores, USDOT number and status, BBB rating, coordinates, and its Great Guys profile URL. Missing source values are returned as `null`; the Actor never invents contact or license data.

The `stateCities` mode returns the cities Great Guys Moving covers for a selected state.

### Input

Choose one mode:

- `byCity`: ranked movers for a city. Provide `state` and `city`.
- `byState`: top ranked movers for a state. Provide `state`.
- `stateCities`: discover covered cities for a state.
- `companyDetail`: extract one public company profile. Provide `companyUrl`.

Use `maxItems` to bound both output and pay-per-event charges. Optional `minScore` and `minReviewCount` filters apply before results are saved.

```json
{
  "mode": "byCity",
  "state": "CA",
  "city": "Los Angeles",
  "maxItems": 10,
  "minScore": 9
}
```

Company detail example:

```json
{
  "mode": "companyDetail",
  "companyUrl": "https://www.greatguysmove.com/companies/california/northridge/roadway-moving-la-moving-company/",
  "maxItems": 1
}
```

### Output example

```json
{
  "recordType": "company",
  "companyId": 84946,
  "name": "Roadway Moving - LA Moving Company",
  "score": 9.71,
  "ratingAdjective": "Exceptional",
  "city": "Northridge",
  "state": "CA",
  "phone": "+1 323-902-1500",
  "qualityScores": { "quality": 9.91, "punctuality": 9.83 },
  "companyUrl": "https://www.greatguysmove.com/companies/california/northridge/roadway-moving-la-moving-company/",
  "sourceUrl": "https://www.greatguysmove.com/movers/california/los-angeles/",
  "scrapedAt": "2026-09-05T00:00:00.000Z"
}
```

### Pricing

This Actor uses pay per event: **$0.00005 per run start** and **$0.003 per dataset record**. A 10-result run costs about $0.03005 in event charges. Set `maxItems` to control the maximum result-event portion of the bill. Platform limits still apply.

### Reliability and limits

The Actor reads public HTML and the structured Next.js data that backs the visible page. It needs no login or third-party API key. Direct requests are the default; optional Apify Proxy settings are available if the site starts rate-limiting. A valid page with no matching records produces an `EMPTY` summary, while invalid inputs and structural/access failures produce an actionable `OUTPUT` diagnostic without fabricated dataset rows.

Great Guys Moving may change its pages or data at any time. Scores and license details reflect the source at scrape time and should be independently verified before high-stakes decisions. Use moderate run sizes and comply with the source website’s terms, robots policy, privacy rules, and applicable law. This Actor is independent and is not affiliated with Great Guys Moving.

# Actor input Schema

## `mode` (type: `string`):

Use this to choose the source page: city movers, statewide movers, covered cities, or one company profile. Defaults to city movers.

## `state` (type: `string`):

Use this for city/state searches. Enter a two-letter code or full state name, for example CA or California. Not used when companyUrl is provided.

## `city` (type: `string`):

Use this with byCity. Enter a US city name, for example Los Angeles. This is not a ZIP-code search.

## `companyUrl` (type: `string`):

Use this with companyDetail. Enter one public greatguysmove.com/companies/... profile URL; other domains are rejected.

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

Use this to cap dataset records and event charges. Defaults to 20; accepted range is 1–500.

## `minScore` (type: `number`):

Use this to keep companies at or above an overall score from 0 to 10. Leave empty to keep every score.

## `minReviewCount` (type: `integer`):

Use this to keep companies with at least this many source data points. Defaults to no minimum.

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

Use this only if direct requests are blocked. Apify Proxy settings are applied consistently to all requests in the run.

## Actor input object example

```json
{
  "mode": "byCity",
  "state": "CA",
  "city": "Los Angeles",
  "companyUrl": "https://www.greatguysmove.com/companies/california/northridge/roadway-moving-la-moving-company/",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Schema-validated records in the default dataset.

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

Counts, source URL, outcome, and warnings.

# 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 = {
    "companyUrl": "https://www.greatguysmove.com/companies/california/northridge/roadway-moving-la-moving-company/"
};

// Run the Actor and wait for it to finish
const run = await client.actor("muhammadafzal/great-guys-move-scraper").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 = { "companyUrl": "https://www.greatguysmove.com/companies/california/northridge/roadway-moving-la-moving-company/" }

# Run the Actor and wait for it to finish
run = client.actor("muhammadafzal/great-guys-move-scraper").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 '{
  "companyUrl": "https://www.greatguysmove.com/companies/california/northridge/roadway-moving-la-moving-company/"
}' |
apify call muhammadafzal/great-guys-move-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,muhammadafzal/great-guys-move-scraper"
        }
    }
}

```

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/F8noAZBV7NmeF9iD6/builds/EUKW1oOZ0Cuvej07q/openapi.json
