# Emerald City Guitars Scraper - Vintage Guitars & Amps (`lulzasaur/emeraldcityguitars-scraper`) Actor

Scrape Emerald City Guitars (emeraldcityguitars.com), the Seattle vintage guitar shop. Get title, brand, year, condition, price, availability, image and URL for collectible guitars, basses and amps — including sold items for price comps. Filter by search, collection or price. No proxy needed.

- **URL**: https://apify.com/lulzasaur/emeraldcityguitars-scraper.md
- **Developed by:** [lulz bot](https://apify.com/lulzasaur) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 listing results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Emerald City Guitars Scraper — Vintage Guitars & Amps

Scrape **[Emerald City Guitars](https://emeraldcityguitars.com)**, Seattle's legendary vintage guitar shop, in seconds. Get clean, structured JSON for every listing — pre-war Martins, '50s Les Pauls, pre-CBS Fenders, vintage Vox/Marshall/Fender amps and boutique builds — including **sold listings** you can use as real-world vintage market price comps.

### What you get

Each record includes:

| Field | Example |
|---|---|
| `title` | `1964 Vox AC30/6` |
| `brand` | `Vox` |
| `year` | `1964` (parsed from title/description; decades like `1950s` supported) |
| `condition` | `Vintage` / `Pre-Owned` / `New` |
| `conditionNotes` | Seller's own condition sentences from the listing copy |
| `category` | `Guitar Amp`, `Electric Guitar`, `Acoustic Guitar`, `Electric Bass`, ... |
| `price` / `compareAtPrice` / `currency` | `1195` / `null` / `USD` |
| `available` / `availability` | `true` / `In Stock` (or `Sold`) |
| `image` | First product photo (high-res Shopify CDN URL) |
| `url` | Direct product page link |
| `tags`, `description`, `sku`, `handle`, `listingId`, `publishedAt`, `updatedAt`, `scrapedAt` | Full metadata |

### Why this data is valuable

- **Vintage market pricing** — Emerald City is one of the best-known vintage dealers in the US; their asking prices are a reference point for '50s–'70s Fender, Gibson and Martin values.
- **Sold comps** — sold listings stay in the feed, so you can track what actually moved.
- **Dealer inventory monitoring** — get notified when a new vintage piece drops (run on a schedule).
- **Arbitrage & sourcing** — compare against Reverb, eBay and auction results.

### Input

All fields are optional — run it with no input to get the whole catalog.

```json
{
    "searchQueries": ["stratocaster", "1959 les paul"],
    "collections": ["amps", "acoustics-martin"],
    "maxItems": 200,
    "onlyAvailable": false,
    "minPrice": 1000,
    "maxPrice": 50000
}
```

- **searchQueries** — keywords matched against title, brand, year, category and tags. Empty = everything.
- **collections** — scrape specific store collections by handle (e.g. `amps`, `vintage-showcase`, `bass-fender`, `acoustics-martin`) instead of the whole store.
- **maxItems** — cap the number of results (`0` = all, ~400 listings).
- **onlyAvailable** — `true` to skip sold items.
- **minPrice / maxPrice** — USD price window.

### Output sample

```json
{
    "listingId": 8907446714420,
    "title": "1964 Vox AC30/6",
    "brand": "Vox",
    "year": "1964",
    "condition": "Vintage",
    "category": "Guitar Amp",
    "price": 7995,
    "currency": "USD",
    "available": true,
    "availability": "In Stock",
    "image": "https://cdn.shopify.com/s/files/1/0587/3080/7348/files/....jpg",
    "url": "https://emeraldcityguitars.com/products/1964-vox-ac30-6",
    "tags": ["Guitar Amp", "Vintage Combo", "Vox AC30"]
}
```

### Usage tips

- Schedule a daily run with `onlyAvailable: true` and diff against the previous dataset to catch fresh arrivals.
- Use no filters + `maxItems: 0` for a full catalog snapshot including sold pieces.
- Combine with a Reverb or eBay sold-listings scraper to spot under/over-priced instruments.

### FAQ

**Does it need a proxy?** No — the actor reads the store's public product feed directly.

**How fast is it?** The full catalog (~400 listings) returns in a few seconds.

**Is this legal?** The actor only collects publicly available product listing data (titles, prices, photos' URLs). No personal data is collected.

# Actor input Schema

## `searchQueries` (type: `array`):

Optional keywords to filter listings (matched against title, brand, year, category and tags — e.g. 'stratocaster', '1959 les paul', 'vox amp'). Leave EMPTY to get every listing.

## `collections` (type: `array`):

Optional store collections to scrape instead of the whole catalog (e.g. 'amps', 'acoustics-martin', 'vintage-showcase', 'bass-fender'). Uses the collection handle from the site URL.

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

Maximum number of listings to scrape. Set to 0 for as many as available (~400 incl. sold listings).

## `onlyAvailable` (type: `boolean`):

Only include instruments currently for sale. Leave OFF to also capture sold listings — useful for vintage-market price comps.

## `minPrice` (type: `integer`):

Only include listings priced at or above this amount (USD).

## `maxPrice` (type: `integer`):

Only include listings priced at or below this amount (USD).

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

Proxy settings. Emerald City Guitars serves its Shopify JSON openly — no proxy is needed by default.

## Actor input object example

```json
{
  "searchQueries": [],
  "collections": [],
  "maxItems": 15,
  "onlyAvailable": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "searchQueries": [],
    "collections": [],
    "maxItems": 15
};

// Run the Actor and wait for it to finish
const run = await client.actor("lulzasaur/emeraldcityguitars-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 = {
    "searchQueries": [],
    "collections": [],
    "maxItems": 15,
}

# Run the Actor and wait for it to finish
run = client.actor("lulzasaur/emeraldcityguitars-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 '{
  "searchQueries": [],
  "collections": [],
  "maxItems": 15
}' |
apify call lulzasaur/emeraldcityguitars-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lulzasaur/emeraldcityguitars-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/BYrrsWcCDJfyBxJob/builds/PeXqhACafzQpD9Jlr/openapi.json
