Submission Grinder Literary Market Scraper
Submission Grinder Literary Market Scraper
Scrape The Submission Grinder — the leading free literary market database for fiction, poetry, and nonfiction writers. Extracts market name, genres, pay rate, response-time averages, acceptance rates, and submission guidelines for 6,000+ markets.
The Submission Grinder is the primary free alternative to Duotrope. Its community-sourced response-time and acceptance-rate statistics are not available from any other free source. Market list browsing is login-gated, but individual market detail pages (/Market/Index/<id>) are fully public — this scraper enumerates them by ID to collect the complete database.
What you get
| Field | Description |
|---|---|
market_id |
Numeric market ID |
market_name |
Publication or market name |
market_type |
fiction / poetry / nonfiction |
genres |
Genres accepted (Fantasy, Science Fiction, Literary, etc.) |
pay_rate |
Pay per word or per piece (e.g., "14 cents/word", "$69.50/piece") |
response_time_avg_days |
Community-reported average response time in days |
acceptance_rate |
Acceptance percentage with average days (e.g., "1.49% - avg 33 days") |
submission_url |
URL to the market's submission guidelines page |
guidelines_summary |
First 500 characters of the market's self-provided description |
simultaneous_submissions |
Whether simultaneous submissions are allowed |
reprints_accepted |
Whether reprints are accepted (when listed) |
status |
open / temporarily_closed / closed / disqualified |
source_url |
Source URL on The Submission Grinder |
Use cases
- Build a searchable literary market database
- Filter markets by genre, pay tier, or acceptance rate
- Track response time trends across fiction magazines
- Power submission-tracking tools for writers
- Research SFWA-qualifying or pro-rate markets
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
startId |
integer | 1 | First market ID to crawl (inclusive) |
endId |
integer | 25000 | Last market ID to crawl (inclusive) |
maxItems |
integer | — | Cap the total number of records scraped |
Markets with IDs outside the active range return empty pages and are silently skipped. To scrape the full database, use startId: 1, endId: 25000, and omit maxItems.
Example output
{
"market_id": 11,
"market_name": "Clarkesworld Magazine",
"market_type": "fiction",
"genres": ["Fantasy", "Science Fiction"],
"pay_rate": "14 cents/word",
"response_time_avg_days": 3.2,
"acceptance_rate": "1.49% - avg 33 days",
"submission_url": "http://clarkesworldmagazine.com/submissions/",
"guidelines_summary": "Note: after receiving a rejection, wait seven days before submitting again. Clarkesworld Magazine is an online science fiction and fantasy magazine...",
"simultaneous_submissions": false,
"reprints_accepted": null,
"status": "open",
"source_url": "https://thegrinder.diabolicalplots.com/Market/Index/11"
}
Pricing
Charged per market record scraped. Uses the standard pay-per-event model — you only pay for data you receive.
Notes
- Market IDs are sequential integers. Some IDs in the range may be unused or point to disqualified markets — these emit a minimal record with
status: "disqualified"or are skipped entirely if the page has no market data. - Response statistics are community-reported and reflect the aggregate of all user-logged submissions over the past 12 months.
- The scraper respects the site's public/private boundary: only the public
Market/Index/<id>pages are crawled. Browse, search, and account pages are never accessed.