Quickstart V4
New to the API? Start here — get your first collected data in about 5 minutes.
With one API key you will call, in order: find a bot → check its settings → request a collection → wait until it finishes → download the data. Copy each command into your terminal and replace YOUR_API_KEY.
- About 5 min
- You need
- A HashScraper account · one crawling bot · credits (or a plan)
-
Copy your API key
Sign up free and get an API keyCopy the key from My info → API key. Send it on every request as the
Authorizationheader in the formBearer YOUR_API_KEY.Treat the key like a password. Do not commit it or show it on screen.
After signing up, your key is under My info → API key. Already have an account? Log in.
-
Check the connection
GETFirst make sure the key works. If your account email comes back, you are ready.
cURLcurl 'https://www.hashscraper.com/v4/api/me' \ -H 'Authorization: Bearer YOUR_API_KEY'Success when you see
"result": "success"and your email. On401, copy the key again. -
Pick a bot
GETList your crawling bots and pick the
idof the one to run. You can also copy it from the bot page via More → Copy bot ID.cURLcurl 'https://www.hashscraper.com/v4/api/schedules' \ -H 'Authorization: Bearer YOUR_API_KEY'data[].idis the bot ID. Use it in the next step to check the bot's settings. -
Check the settings
GETSee which inputs the bot uses (keyword, sort order, …), their saved values, and the values you can choose from.
Each key in
param_infomust be sent insideparamswhen you request a collection. You may use thealias(e.g.keyword) instead ofparam1. For inputs withoptions, send one of the listedvalues.cURLcurl 'https://www.hashscraper.com/v4/api/schedules/8f3a7c1e9b5d24f6/param_info' \ -H 'Authorization: Bearer YOUR_API_KEY'For each key in
data.param_info, checkname(meaning),value(saved value) andoptions(choices). -
Request a collection
POSTAsk the bot to collect. Every input the bot uses must be inside
params(a missing key returnsMISSING_PARAM). Values sent here do not change the bot's settings.Credits are deducted as the collection saves data. By default it is the bot's credits per item for every row; some collection methods that save many rows in one batch can apply a multiplier, and contract prices can apply (the dataset shows the credits actually used).
schedule_result_ididentifies this collection (dataset).cURLcurl -X POST 'https://www.hashscraper.com/v4/api/schedules/8f3a7c1e9b5d24f6/collections' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{ "params": { "param1": "키성장" } }'Use
data.schedule_result_idin the next step. -
Wait until it finishes
GETCollection runs in the background. Poll the status every 10–30 seconds. Depending on the site and volume it takes from tens of seconds to tens of minutes.
cURLcurl 'https://www.hashscraper.com/v4/api/schedule_results/239758028' \ -H 'Authorization: Bearer YOUR_API_KEY'Done when
sr_statusisfinishorcomplete.data_countis the number of rows so far. -
Download the data
GETFetch the rows of the finished dataset,
limitrows at a time. Pass the response'snext_cursorascursorto get the next page.cURLcurl 'https://www.hashscraper.com/v4/api/schedule_results/239758028/results?limit=1000' \ -H 'Authorization: Bearer YOUR_API_KEY'When
next_cursorisnull, you have the last page.
Next steps
import time
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://www.hashscraper.com/v4/api"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# 2. Check the connection
me = requests.get(f"{BASE}/me", headers=HEADERS).json()
print("Account:", me["data"]["email"])
# 3. Choose the first bot in the list
bots = requests.get(f"{BASE}/schedules", headers=HEADERS).json()
bot = bots["data"][0]
# 4. Check configuration (inputs, saved values, available choices)
url = f"{BASE}/schedules/{bot['id']}/param_info"
data = requests.get(url, headers=HEADERS).json()["data"]
info = data["param_info"]
params = {}
for key, item in info.items():
choices = [o["value"] for o in item.get("options", [])]
print(key, item["name"], item.get("value"), choices)
params[key] = item.get("value") or ""
# 5. Request collection
url = f"{BASE}/schedules/{bot['id']}/collections"
res = requests.post(url, headers=HEADERS, json={"params": params})
sr_id = res.json()["data"]["schedule_result_id"]
# 6. Wait for completion (check every 15 seconds)
while True:
url = f"{BASE}/schedule_results/{sr_id}"
data = requests.get(url, headers=HEADERS).json()["data"]
status = data["sr_status"]
if status in ("finish", "complete"):
break
if status in ("canceling", "canceled"):
raise SystemExit("Collection was canceled")
time.sleep(15)
# 7. Retrieve data (1,000 rows per page)
rows, cursor = [], None
while True:
query = {"limit": 1000}
if cursor:
query["cursor"] = cursor
url = f"{BASE}/schedule_results/{sr_id}/results"
page = requests.get(url, headers=HEADERS, params=query).json()
rows += page["data"]
cursor = page["next_cursor"]
if cursor is None:
break
print(len(rows), "rows received")
Steps 1–7 chained together. Requires the requests package.