# Tractor Supply Product Scraper — Prices, Specs & Stock (`crawloop/tractor-supply-product-scraper`) Actor

Scrape Tractor Supply products by keyword, category, SKU or URL. Export prices, ratings, availability, fulfillment flags, specs and images for price monitoring, MAP checks, and catalog builds. Fast HTTP Tractor Supply scraper / API alternative — no browser.

- **URL**: https://apify.com/crawloop/tractor-supply-product-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** E-commerce, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 overview products

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

## Tractor Supply Product Scraper — Prices, Specs & Stock

> **Disclaimer:** Unofficial tool — not affiliated with, sponsored by, or endorsed by Tractor Supply Co. or its affiliates. Data is read from publicly accessible catalog pages only. No login. You are responsible for complying with applicable law and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

> **Rural retail catalog** — Tractor Supply product data for price monitoring, MAP checks, and PIM / catalog builds. Pair with Walmart for ZIP-local mass retail and Machineryline for used farm-equipment comps.

| Tractor Supply catalog | Walmart catalog | Weekly grocery ads | Used farm equipment |
| :--- | :--- | :--- | :--- |
| **Tractor Supply Product Scraper** ◄── you are here | [Walmart Scraper](https://apify.com/crawloop/walmart-scraper) | [Aldi Weekly Ad Scraper](https://apify.com/crawloop/aldi-weekly-ad-scraper) · [Lidl Weekly Offers Scraper](https://apify.com/crawloop/lidl-weekly-offers-scraper) | [Machineryline Scraper](https://apify.com/crawloop/machineryline-scraper) · [Fastline Scraper](https://apify.com/crawloop/fastline-scraper) |

This **Tractor Supply scraper** turns public catalog search, category, SKU, and product-page lookups into a structured Apify dataset. Export **price**, **list price**, **star rating**, **review count**, **buy-online pickup / delivery flags**, **brand**, **UPC**, **specs**, and **images** as JSON or CSV — a Tractor Supply API alternative for **Python**, **Node.js**, and **MCP** pipelines.

***

### When to use this Actor

- **Tractor Supply product scrape** by keyword, category id, category URL, SKU / part number, or product URL
- **Price monitoring** and MAP checks on advertised prices and promotions
- **Catalog / PIM** fills from titles, brands, manufacturer part numbers, images, and specs
- **Assortment research** — ratings, review counts, buyable status, online vs in-store availability
- **SKU enrichment** when you already have Tractor Supply part numbers or product URLs

### When not to use this Actor

- **Checkout, cart, or Neighbors Club account** automation
- **Full review-text export** — this Actor returns rating and review **count**, not review bodies
- **Sister banners** such as Petsense — Tractor Supply catalog only
- **Store-locator crawls** as a primary job (pass a known physical `storeId` instead)
- **Used farm equipment classifieds** — use [Machineryline Scraper](https://apify.com/crawloop/machineryline-scraper)
- **ZIP-local Walmart prices** — use [Walmart Scraper](https://apify.com/crawloop/walmart-scraper)

***

### Key Features

- **Keyword search** — same terms shoppers type into Tractor Supply search
- **SKU / URL lookup** — part numbers, catalog ids, and product-page URLs (not listing-only)
- **Category harvest** — numeric category ids or `/tsc/catalog/{slug}` URLs
- **Overview vs detail** — fast listing rows, or enrich with long description + specs table
- **Localized store** — optional **physical** store number (100–3254) for price/availability; website store `10151` is the online catalog, not a store location
- **Fulfillment flags** — pickup, same-day, standard delivery, autoship, truck delivery
- **Fast HTTP** — public catalog JSON via Chrome TLS impersonation; no headless browser

***

### Use Cases

| Use case | What you get | Why it helps |
| :--- | :--- | :--- |
| **Price / MAP monitoring** | `price`, `originalPrice`, `onPromotion`, `currency` | Track advertised Tractor Supply prices vs your MAP |
| **SKU / URL enrichment** | Title, brand, UPC, specs, images | Fill PIM / ERP from known part numbers |
| **Category harvest** | Overview rows with ratings and availability | Build poultry, fencing, or tool shortlists |
| **Assortment research** | Rating, review count, buyable, fulfillment flags | See what sells and how it ships |
| **Store-localized checks** | Optional physical `storeId` | Compare online catalog vs a store number |

***

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `productUrls` | Array | — | Tractor Supply product detail URLs |
| `skus` | Array | — | Part numbers (e.g. `135276099`) or catalog unique IDs |
| `keywords` | Array | — | Search terms, one per line |
| `categoryIds` | Array | — | Numeric category ids |
| `categoryUrls` | Array | — | `/tsc/catalog/{slug}` or `/tsc/search/{term}` URLs |
| `scrapeMode` | Enum | `overview` | `overview` (listings) or `detail` (specs + description) |
| `sort` | Enum | `relevance` | `relevance`, `name_asc`, `name_desc`, `price_low`, `price_high`, `top_sellers`, `top_rated` |
| `storeId` | String | empty | Physical store number; leave empty for the online catalog |
| `maxItems` | Integer | `50` | Maximum dataset items per run |
| `maxPages` | Integer | `5` | Max search pages per keyword/category (24 products/page) |
| `includeAttributes` | Boolean | `false` | Attach raw `attributes[]` from the catalog JSON |
| `requestDelaySecs` | Number | `0.25` | Delay between HTTP requests |
| `proxyConfiguration` | Object | US proxy | Apify Proxy — US recommended |

#### Input Example — keyword overview

```json
{
  "keywords": ["chicken feed"],
  "scrapeMode": "overview",
  "sort": "top_sellers",
  "maxItems": 50
}
```

#### Input Example — SKU + product URL detail

```json
{
  "productUrls": [
    "https://www.tractorsupply.com/tsc/product/tractor-supply-5-gal-watertight-bucket-lid-red-108536199"
  ],
  "skus": ["135276099"],
  "scrapeMode": "detail",
  "maxItems": 10
}
```

#### Input Example — category URL

```json
{
  "categoryUrls": ["https://www.tractorsupply.com/tsc/catalog/poultry"],
  "scrapeMode": "overview",
  "maxItems": 100,
  "maxPages": 5
}
```

***

### Output Format

Dataset records use `recordType`:

| `recordType` | Meaning |
| :--- | :--- |
| `listing` | Search / category overview row |
| `product` | Enriched detail (description, specs, documents, UPC) |
| `error` | Fetch or parse failure |

#### Key fields

| Field | Description |
| :--- | :--- |
| `productId` | Catalog `uniqueID` |
| `partNumber` | Tractor Supply SKU |
| `skuId` | Single-SKU catalog entry id |
| `upc` | UPC when present on the SKU |
| `title` / `brand` / `manufacturer` / `mfrPartNumber` | Identity fields |
| `price` / `originalPrice` / `currency` | Offer and list price |
| `rating` / `reviewCount` | Star rating and review count |
| `availability` | Online Only / Online In Stores / In Stores Only |
| `buyable` | Purchasable flag |
| `pickupAvailable` / `sddDeliveryAvailable` / `stdDeliveryAvailable` | Fulfillment |
| `autoshipEligible` / `truckDelivery` | Subscription and freight flags |
| `specs` / `description` / `documents` | Detail mode only |
| `url` / `thumbnail` / `images` | Links and media |
| `storeId` | Physical store or `10151` online |
| `scrapedAt` | ISO-8601 timestamp |

#### Output Example (abbreviated)

```json
{
  "source": "tractorsupply",
  "recordType": "product",
  "productId": "552395",
  "partNumber": "135276099",
  "upc": "858191007274",
  "title": "Kreamer Feed Conventional Egg Layer Pelleted Chicken Feed Tote, 2,000 lb.",
  "brand": "Kreamer Feed",
  "price": 749.99,
  "originalPrice": 799.99,
  "currency": "USD",
  "rating": 4.14,
  "reviewCount": 28,
  "availability": "Online Only",
  "autoshipEligible": true,
  "url": "https://www.tractorsupply.com/tsc/product/kreamer-feed-conventional-egg-layer-pelleted-chicken-feed-tote-2000-lb-135276099"
}
```

***

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/tractor-supply-product-scraper').call({
  keywords: ['chicken feed'],
  scrapeMode: 'overview',
  maxItems: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 5));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient(token)
run = client.actor("crawloop/tractor-supply-product-scraper").call(
    run_input={
        "keywords": ["chicken feed"],
        "scrapeMode": "overview",
        "maxItems": 25,
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("partNumber"), item.get("price"), item.get("availability"))
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/crawloop~tractor-supply-product-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["chicken feed"],"scrapeMode":"overview","maxItems":25}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp). Connect your Apify account, then call `crawloop/tractor-supply-product-scraper`.

Example prompts:

- "Run Tractor Supply Product Scraper for keyword chicken feed and return the top 20 rows as JSON"
- "Look up Tractor Supply SKU 135276099 in detail mode and summarize price, specs, and availability"
- "Scrape Tractor Supply category poultry as overview listings, then chain Machineryline Scraper for used farm equipment comps"

### Suite next step

After a Tractor Supply catalog pull, run [Walmart Scraper](https://apify.com/crawloop/walmart-scraper) for ZIP-local mass-retail comps, [Aldi Weekly Ad Scraper](https://apify.com/crawloop/aldi-weekly-ad-scraper) for grocery circulars, [Fastline Scraper](https://apify.com/crawloop/fastline-scraper) for US farm classifieds, or [Machineryline Scraper](https://apify.com/crawloop/machineryline-scraper) for used tractor, implement, and heavy-equipment asking prices.

### Related Actors

| Focus | Actor |
| :--- | :--- |
| **Tractor Supply retail catalog** | **Tractor Supply Product Scraper** ◄── you are here |
| Walmart ZIP-local catalog | [Walmart Scraper](https://apify.com/crawloop/walmart-scraper) |
| ALDI US weekly circular | [Aldi Weekly Ad Scraper](https://apify.com/crawloop/aldi-weekly-ad-scraper) |
| Lidl EU weekly leaflets | [Lidl Weekly Offers Scraper](https://apify.com/crawloop/lidl-weekly-offers-scraper) |
| US Fastline farm classifieds | [Fastline Scraper](https://apify.com/crawloop/fastline-scraper) |
| Used farm & heavy equipment listings | [Machineryline Scraper](https://apify.com/crawloop/machineryline-scraper) |

### FAQ

**Can I get prices for a specific store?**\
Yes — set `storeId` to a **physical** store number from a store page URL (the trailing digits, e.g. `2306`). Do not pass `10151`; that is the online catalog id.

**What is the difference between overview and detail?**\
Overview is one search request per page (price, ratings, fulfillment flags). Detail performs a product JSON lookup per SKU and adds the long description, specs, UPC, and document links.

**SKU or unique ID?**\
Nine-digit values such as `135276099` are part numbers. Shorter catalog ids (about 5–8 digits) are treated as `uniqueID`. Product URLs use the trailing part number.

**Does this include review text?**\
No. Each row includes star rating and review count only.

**Why is `price` sometimes null?**\
Tractor Supply’s public search JSON often returns empty `price[].value` on the catalog replica. SKU, title, ratings, availability, and fulfillment flags still populate. Try a physical `storeId` or RESIDENTIAL US proxy if you need advertised prices.

**Are error rows billed?**\
No. `error` rows are not billed as listing or product results.

### Notes

- Prefer **US Apify Proxy**. Bare datacenter IPs often time out; switch to RESIDENTIAL US if prices come back empty or search returns 403.
- The **part number** at the end of a product URL is the canonical SKU for lookups.
- `error` rows are not billed as listing or product results.

# Actor input Schema

## `productUrls` (type: `array`):

Tractor Supply product page URLs. The numeric SKU at the end of the path is the catalog part number.

## `skus` (type: `array`):

Tractor Supply part numbers (e.g. 135276099) or catalog unique IDs. Looked up via product JSON, not HTML.

## `keywords` (type: `array`):

Free-text Tractor Supply searches — the same terms you would type into the site search bar. One keyword per line.

## `categoryIds` (type: `array`):

Numeric Tractor Supply category ids from parentCatalogGroupID (the part after the underscore, e.g. 24534). Harvests the category catalog.

## `categoryUrls` (type: `array`):

Tractor Supply /tsc/catalog/{slug} or /tsc/search/{term} URLs. Catalog slugs are searched as keywords.

## `scrapeMode` (type: `string`):

Overview returns search/category listing rows (price, ratings, availability). Detail adds long description, specs table, UPC, and documents via a product lookup.

## `sort` (type: `string`):

Native Tractor Supply search sort.

## `storeId` (type: `string`):

Optional physical Tractor Supply store number (100–3254) for localized price/availability. Leave empty for the online catalog (store 10151). Do not use 10151 as a store number — that is the website store, not Brentwood TN.

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

Stop after this many dataset items across all inputs.

## `maxPages` (type: `integer`):

Maximum Solr pages per keyword or category (24 products per page).

## `includeAttributes` (type: `boolean`):

Attach the full attributes\[] array from the Commerce JSON. Adds several KB per row.

## `requestDelaySecs` (type: `number`):

Pause between HTTP requests on the sticky session.

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

Apify Proxy. US datacenter is the cheap default; switch to RESIDENTIAL US if search returns 403 or empty prices.

## Actor input object example

```json
{
  "keywords": [
    "chicken feed"
  ],
  "scrapeMode": "overview",
  "sort": "relevance",
  "storeId": "",
  "maxItems": 50,
  "maxPages": 5,
  "includeAttributes": false,
  "requestDelaySecs": 0.25,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Default dataset items.

# 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 = {
    "keywords": [
        "chicken feed"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/tractor-supply-product-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 = {
    "keywords": ["chicken feed"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/tractor-supply-product-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 '{
  "keywords": [
    "chicken feed"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}' |
apify call crawloop/tractor-supply-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/tractor-supply-product-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/Q50eFkYfBDnA5cDb4/builds/aM9tRYUtlKQEuidTM/openapi.json
