Scrape book reviews for: $ARGUMENTS
$ARGUMENTS should be one of:
- An author name (e.g.
"Alan Hirsch") — scrapes reviews for all discoverable books
--book "The mDNA" to scrape reviews for a single book
--isbn 978-0801072826 or --asin B01N0SYZPZ to target a specific edition
--goodreads-url https://www.goodreads.com/book/show/12345 to scrape a specific Goodreads page
--editorial-only to skip reader reviews and only collect professional/editorial reviews
--refresh to re-scrape books that already have review files (updates stats, adds new reviews)
--max-reviews N to limit reader reviews per book (default: 100)
- Empty — ask the user for the author name
Before Starting
- Confirm browser tools are available (
mcp__chrome-devtools) — required for scraping review pages
- Check
content-library/reviews/ for any existing review files for this author
- Read
src/lib/database/schema.ts for the books table definition — use isbn, asin, title, slug to match books
- Read existing research in
_docs/ or movemental-ai/_docs/movement_leader_research/ for any prior review summaries to build on
- If existing review files are found, load them and run in incremental mode — add new reviews, update stats, don't overwrite existing data
Pipeline Stages
Stage 1 — Discover Books
- Database lookup: Query the
books table for all books by the author (match by author_id or author name in tenant config)
- Goodreads search: Navigate to
https://www.goodreads.com/search?q={author+name} and extract book listings
- Amazon search: Search
https://www.amazon.com/s?k={author+name}&i=stripbooks and extract book listings
- Cross-reference: Match discovered books with DB records by ISBN/ASIN/title
- Build book manifest: For each book, record:
title, isbn, asin, goodreads_url, amazon_url, goodreads_id
publication_year, publisher, co_authors
Stage 2 — Scrape Goodreads Reviews
For each book in the manifest:
2a — Book Stats Page
- Navigate to the Goodreads book page (e.g.
https://www.goodreads.com/book/show/{id})
- Extract aggregate stats:
- Average rating (e.g. 4.08)
- Total ratings count (e.g. 1,581)
- Total reviews count (e.g. 96)
- Rating distribution (count per star: 5★, 4★, 3★, 2★, 1★)
- Extract the book's Goodreads genre tags / shelves (e.g. "theology", "church", "missional")
2b — Individual Reviews
- Navigate to the reviews page, sorted by most popular first
- For each review visible on the page, extract:
reviewer_name — display name
reviewer_url — profile link (for verification, not storage)
rating — star count (1–5), or null if no rating
date — review date
text — full review text (expand "...more" if truncated)
likes — number of likes/helpful votes
- Paginate through reviews:
- Click "next page" or scroll to load more
- Stop when you reach
--max-reviews (default 100) or run out of pages
- Prioritize: most-liked reviews first, then most recent
- Important: If Goodreads blocks or rate-limits, wait 3–5 seconds between page loads. If blocked entirely, log a warning and continue to Amazon.
2c — Goodreads "Community Reviews" Breakdown
If available, extract the "Community Reviews" breakdown:
- Filter by rating to get representative reviews at each star level
- Aim for at least 2–3 reviews per star level to understand the full sentiment spectrum
Stage 3 — Scrape Amazon Reviews
For each book in the manifest:
3a — Product Page Stats
- Navigate to the Amazon product page using ASIN or ISBN search
- Extract:
- Average rating (e.g. 4.6)
- Total ratings count
- Rating distribution (percentage per star)
- "Top reviews" section
3b — Individual Reviews
- Navigate to the full reviews page (
/product-reviews/{ASIN})
- Sort by Top reviews (most helpful first)
- For each review, extract:
reviewer_name
rating — star count
date
title — review headline
text — full review body
helpful_votes — "X people found this helpful"
verified_purchase — boolean
vine_review — boolean (Amazon Vine program)
- Paginate until
--max-reviews or exhausted
- Then sort by Most recent and grab the 10 most recent reviews (to capture current sentiment)
3c — Amazon "Most helpful" Reviews
Specifically flag the top 3 positive and top 3 critical reviews that Amazon highlights — these are the most-read reviews and carry outsized influence.
Stage 4 — Scrape Editorial/Professional Reviews
Search for published reviews from blogs, journals, and publications:
- Web search queries (per book):
"{book title}" "alan hirsch" book review
"{book title}" review site:thegospelcoalition.org OR site:patheos.com OR site:christianitytoday.com
"{book title}" review site:englewoodreview.org OR site:9marks.org OR site:lifeandleadership.com
"{book title}" review missional OR church OR movement
- For each editorial review found, extract:
publication — outlet name
reviewer_name — author of the review
date — publication date
url — direct link
sentiment — Positive / Mixed / Critical
key_quote — the single most representative sentence (for use in marketing)
full_text — if accessible (don't scrape paywalled content — note as [paywalled])
Stage 5 — Analyze & Extract
Process all collected reviews to produce actionable intelligence:
5a — Sentiment Analysis
For each book, categorize reviews into themes:
Praise themes — What do people love? Group by recurring pattern:
- e.g. "paradigm-shifting", "practical frameworks", "scholarly yet accessible"
- Count how many reviews mention each theme
- Extract the 3 best-written review quotes for each praise theme
Criticism themes — What do people criticize? Group by recurring pattern:
- e.g. "repetitive", "too academic", "weak on application"
- Count how many reviews mention each criticism
- Extract the most articulate critical quotes (useful for addressing objections)
Surprise themes — What unexpected reactions appear?
- e.g. "changed my ministry", "read it three times", "assigned in seminary"
5b — Quotable Lines
Extract the 20 most quotable review excerpts across all books, ranked by:
- Specificity (names a concept, not just "great book")
- Emotional resonance (would make someone want to read the book)
- Credibility signal (verified purchase, known reviewer, high helpful votes)
- Brevity (1–3 sentences max)
Tag each quote with:
use_case — where this quote could appear on the platform:
hero — powerful enough for the home page
book-detail — relevant to a specific book page
social-proof — general credibility signal
course-conversion — speaks to transformation/formation
ai-lab-trust — speaks to depth of Alan's work
newsletter — could entice email subscription
social-media — shareable as a standalone post
5c — Reader Language Map
Analyze HOW readers describe Alan and his work in their own words. Extract:
- The 10 most common adjectives readers use
- The 5 most common verbs (what does Alan's work DO to people?)
- The 3 most common comparisons ("like X but Y", "reminds me of Z")
- Terms readers use that Alan himself doesn't use (market language gaps)
- The emotional arc: what did they feel before, during, and after reading?
This map is gold for copy — it tells you how to speak about Alan in the language his audience already uses.
5d — Objection Map
From negative and mixed reviews, build an objection map:
- What concerns do people have BEFORE reading? (addressed in marketing copy)
- What frustrates people DURING reading? (addressed in content strategy)
- What do people wish was different AFTER reading? (addressed in course/platform design)
Stage 6 — Output
Save results to content-library/reviews/{author-slug}/ with these files:
Per-book files:
content-library/reviews/alan-hirsch/
├── _manifest.json # Book list with URLs, ISBNs, stats
├── the-mdna.md # All reviews + analysis for this book
├── the-shaping-of-things.md
├── 5q.md
├── the-permanent-revolution.md
├── rejesus.md
├── [other-books].md
├── _editorial-reviews.md # All editorial/professional reviews across books
├── _quotable-lines.md # Top 20 quotes ranked by use case
├── _reader-language-map.md # How readers talk about Alan
├── _objection-map.md # Criticism themes + how to address them
└── _sentiment-summary.md # Cross-book sentiment dashboard
Per-book markdown format:
# Reviews: {Book Title}
**Last scraped**: {date}
**Goodreads**: {rating} avg · {count} ratings · {review_count} reviews
**Amazon**: {rating} avg · {count} ratings
## Rating Distribution
| Stars | Goodreads | Amazon |
|-------|-----------|--------|
| 5★ | {n} ({%}) | {n} ({%}) |
| 4★ | {n} ({%}) | {n} ({%}) |
| 3★ | {n} ({%}) | {n} ({%}) |
| 2★ | {n} ({%}) | {n} ({%}) |
| 1★ | {n} ({%}) | {n} ({%}) |
## Praise Themes
### {Theme 1} — mentioned in {n} reviews
{Summary of what reviewers say}
> "{Best quote}" — {reviewer}, {platform}, {rating}★
> "{Second best quote}" — {reviewer}, {platform}, {rating}★
### {Theme 2} — mentioned in {n} reviews
...
## Criticism Themes
### {Theme 1} — mentioned in {n} reviews
{Summary}
> "{Representative quote}" — {reviewer}, {platform}, {rating}★
## Most Helpful Reviews
### ★★★★★ — {title}
**{reviewer}** · {platform} · {date} · {helpful_votes} helpful
{full text}
### ★★★★ — {title}
...
### ★★★ — {title}
...
### ★★ — {title}
...
### ★ — {title}
...
## All Scraped Reviews
<details>
<summary>{n} reviews collected</summary>
| # | Platform | Rating | Date | Reviewer | Helpful | Title |
|---|----------|--------|------|----------|---------|-------|
| 1 | Goodreads | 5 | 2024-01-15 | Jane D. | 42 | "Changed my ministry" |
...
### Review 1
**{title}** · {rating}★ · {reviewer} · {platform} · {date}
{full text}
### Review 2
...
</details>
_quotable-lines.md format:
# Quotable Review Lines — Alan Hirsch
**Last updated**: {date}
**Total quotes extracted**: 20
## Hero-Grade (strongest for home page / marketing)
> "{quote}" — {reviewer}, reviewing *{book}* ({platform}, {rating}★, {helpful} helpful)
**Use cases**: hero, social-proof
**Why it works**: {1-sentence explanation}
> ...
## Book-Specific (for detail pages)
### The mDNA
> "{quote}" — ...
### 5Q
> "{quote}" — ...
## Transformation / Formation (for course pages)
> "{quote}" — ...
## Social Media Ready (standalone shareable)
> "{quote}" — ...
_reader-language-map.md format:
# Reader Language Map — Alan Hirsch
**Source**: {n} reviews across {m} books
## How Readers Describe Alan
**Most common adjectives**: {list with counts}
**Most common verbs (what his work does)**: {list}
**Comparisons readers make**: {list}
## Language Gaps
Terms readers use that Alan/the platform doesn't:
- "{term}" — used by {n} reviewers, appears {0} times on platform
## Emotional Arc
**Before reading**: {what readers expected or felt}
**During reading**: {what the experience was like}
**After reading**: {how they describe the impact}
## Copy Implications
{3-5 sentences on how this language map should inform platform copy}
Key Design Rules
- Idempotent — Safe to re-run. New reviews are appended, stats are updated, existing reviews are not duplicated (match by reviewer + date + first 50 chars of text)
- Rate-limit respectful — 3–5 second delays between page loads on Goodreads/Amazon. If blocked, stop and report progress.
- No login required — Only scrape publicly visible reviews. Do not attempt to log in to Goodreads or Amazon.
- Attribution preserved — Every quote includes reviewer name, platform, date, and rating. Never fabricate or alter review text.
- Privacy-conscious — Store reviewer display names only, not profile URLs or identifying information beyond what's publicly displayed
- Graceful degradation — If one platform blocks, continue with the other. If a book isn't found, skip and report.
- Prioritize quality over quantity — 50 well-chosen, high-signal reviews per book are more valuable than 500 scraped indiscriminately
Output Report
Print a summary after completion:
## Review Scrape Report: {Author Name}
### Books Processed: {n}
| Book | Goodreads | Amazon | Editorial | Total |
|------|-----------|--------|-----------|-------|
| The mDNA | 4.08 (87 reviews) | 4.6 (45 reviews) | 8 | 140 |
| ... | ... | ... | ... | ... |
### Stage 1 — Discovery: OK
- Books in DB: {n}
- Books on Goodreads: {n}
- Books on Amazon: {n}
- Matched: {n}
### Stage 2 — Goodreads: OK / PARTIAL / BLOCKED
- Reviews scraped: {n} across {m} books
- Blocked on: [list any books where scraping failed]
### Stage 3 — Amazon: OK / PARTIAL / BLOCKED
- Reviews scraped: {n} across {m} books
### Stage 4 — Editorial: OK
- Editorial reviews found: {n} across {m} publications
### Stage 5 — Analysis: OK
- Praise themes identified: {n}
- Criticism themes identified: {n}
- Quotable lines extracted: {n}
### Output
- Files written to: content-library/reviews/{author-slug}/
- Total files: {n}
### Warnings
- [any non-blocking issues, rate limiting, missing books, etc.]
### Next Steps
1. Review `_quotable-lines.md` for copy-ready social proof
2. Review `_reader-language-map.md` to inform platform copy voice
3. Review `_objection-map.md` to address concerns in marketing
4. Use quotes in `/copy-strategy-worksheet` (Parts 2.2, 3.1, 10.2)
5. Consider adding top quotes to `tenant.config.ts` testimonials section
Anti-Scraping Considerations
Goodreads and Amazon actively resist scraping. Strategies:
- Use browser tools (
mcp__chrome-devtools) rather than raw HTTP — renders JavaScript, handles dynamic loading
- Human-like pacing — 3–5 seconds between page loads, vary the interval
- Don't paginate too deep — Top 100 reviews per book is plenty; going to page 50 will trigger blocks
- Fallback to WebSearch — If direct scraping fails, use
WebSearch queries like site:goodreads.com "the forgotten ways" review to find cached/indexed review content
- Accept partial results — Getting 60% of reviews with high signal is better than getting blocked trying for 100%
- Session management — If using browser, don't clear cookies between requests for the same domain within a run
Error Handling
- Goodreads CAPTCHA / block → log warning, report partial results, suggest retry with
--goodreads-url for manual URL input
- Amazon bot detection → log warning, continue with Goodreads + editorial only
- Book not found on platform → skip, add to warnings with search terms tried
- Review text truncated and can't expand → save truncated text, flag as
[truncated]
- Rate limit hit → pause 30 seconds, retry once, then skip to next book
- No reviews found for a book → create empty file with stats only, note in report
1---2name: review-scrape-23description: Scrape book reviews from Goodreads and Amazon — fetches actual review text, ratings, dates, and reviewer metadata. Organizes by book, extracts quotable lines, analyzes sentiment patterns, and outputs structured markdown for copy strategy and social proof.4---56Scrape book reviews for: $ARGUMENTS78$ARGUMENTS should be one of:9- An author name (e.g. `"Alan Hirsch"`) — scrapes reviews for all discoverable books10- `--book "The mDNA"` to scrape reviews for a single book11- `--isbn 978-0801072826` or `--asin B01N0SYZPZ` to target a specific edition12- `--goodreads-url https://www.goodreads.com/book/show/12345` to scrape a specific Goodreads page13- `--editorial-only` to skip reader reviews and only collect professional/editorial reviews14- `--refresh` to re-scrape books that already have review files (updates stats, adds new reviews)15- `--max-reviews N` to limit reader reviews per book (default: 100)16- Empty — ask the user for the author name1718## Before Starting19201. Confirm browser tools are available (`mcp__chrome-devtools`) — required for scraping review pages212. Check `content-library/reviews/` for any existing review files for this author223. Read `src/lib/database/schema.ts` for the `books` table definition — use `isbn`, `asin`, `title`, `slug` to match books234. Read existing research in `_docs/` or `movemental-ai/_docs/movement_leader_research/` for any prior review summaries to build on245. If existing review files are found, load them and run in **incremental mode** — add new reviews, update stats, don't overwrite existing data2526## Pipeline Stages2728### Stage 1 — Discover Books29301. **Database lookup**: Query the `books` table for all books by the author (match by `author_id` or author name in tenant config)312. **Goodreads search**: Navigate to `https://www.goodreads.com/search?q={author+name}` and extract book listings323. **Amazon search**: Search `https://www.amazon.com/s?k={author+name}&i=stripbooks` and extract book listings334. **Cross-reference**: Match discovered books with DB records by ISBN/ASIN/title345. **Build book manifest**: For each book, record:35 - `title`, `isbn`, `asin`, `goodreads_url`, `amazon_url`, `goodreads_id`36 - `publication_year`, `publisher`, `co_authors`3738### Stage 2 — Scrape Goodreads Reviews3940For each book in the manifest:4142#### 2a — Book Stats Page431. Navigate to the Goodreads book page (e.g. `https://www.goodreads.com/book/show/{id}`)442. Extract aggregate stats:45 - **Average rating** (e.g. 4.08)46 - **Total ratings count** (e.g. 1,581)47 - **Total reviews count** (e.g. 96)48 - **Rating distribution** (count per star: 5★, 4★, 3★, 2★, 1★)493. Extract the book's Goodreads genre tags / shelves (e.g. "theology", "church", "missional")5051#### 2b — Individual Reviews521. Navigate to the reviews page, sorted by **most popular** first532. For each review visible on the page, extract:54 - `reviewer_name` — display name55 - `reviewer_url` — profile link (for verification, not storage)56 - `rating` — star count (1–5), or null if no rating57 - `date` — review date58 - `text` — full review text (expand "...more" if truncated)59 - `likes` — number of likes/helpful votes603. Paginate through reviews:61 - Click "next page" or scroll to load more62 - Stop when you reach `--max-reviews` (default 100) or run out of pages63 - Prioritize: most-liked reviews first, then most recent644. **Important**: If Goodreads blocks or rate-limits, wait 3–5 seconds between page loads. If blocked entirely, log a warning and continue to Amazon.6566#### 2c — Goodreads "Community Reviews" Breakdown67If available, extract the "Community Reviews" breakdown:68- Filter by rating to get representative reviews at each star level69- Aim for at least 2–3 reviews per star level to understand the full sentiment spectrum7071### Stage 3 — Scrape Amazon Reviews7273For each book in the manifest:7475#### 3a — Product Page Stats761. Navigate to the Amazon product page using ASIN or ISBN search772. Extract:78 - **Average rating** (e.g. 4.6)79 - **Total ratings count**80 - **Rating distribution** (percentage per star)81 - **"Top reviews"** section8283#### 3b — Individual Reviews841. Navigate to the full reviews page (`/product-reviews/{ASIN}`)852. Sort by **Top reviews** (most helpful first)863. For each review, extract:87 - `reviewer_name`88 - `rating` — star count89 - `date`90 - `title` — review headline91 - `text` — full review body92 - `helpful_votes` — "X people found this helpful"93 - `verified_purchase` — boolean94 - `vine_review` — boolean (Amazon Vine program)954. Paginate until `--max-reviews` or exhausted965. Then sort by **Most recent** and grab the 10 most recent reviews (to capture current sentiment)9798#### 3c — Amazon "Most helpful" Reviews99Specifically flag the top 3 positive and top 3 critical reviews that Amazon highlights — these are the most-read reviews and carry outsized influence.100101### Stage 4 — Scrape Editorial/Professional Reviews102103Search for published reviews from blogs, journals, and publications:1041051. **Web search queries** (per book):106 - `"{book title}" "alan hirsch" book review`107 - `"{book title}" review site:thegospelcoalition.org OR site:patheos.com OR site:christianitytoday.com`108 - `"{book title}" review site:englewoodreview.org OR site:9marks.org OR site:lifeandleadership.com`109 - `"{book title}" review missional OR church OR movement`1102. For each editorial review found, extract:111 - `publication` — outlet name112 - `reviewer_name` — author of the review113 - `date` — publication date114 - `url` — direct link115 - `sentiment` — Positive / Mixed / Critical116 - `key_quote` — the single most representative sentence (for use in marketing)117 - `full_text` — if accessible (don't scrape paywalled content — note as `[paywalled]`)118119### Stage 5 — Analyze & Extract120121Process all collected reviews to produce actionable intelligence:122123#### 5a — Sentiment Analysis124For each book, categorize reviews into themes:125126**Praise themes** — What do people love? Group by recurring pattern:127- e.g. "paradigm-shifting", "practical frameworks", "scholarly yet accessible"128- Count how many reviews mention each theme129- Extract the 3 best-written review quotes for each praise theme130131**Criticism themes** — What do people criticize? Group by recurring pattern:132- e.g. "repetitive", "too academic", "weak on application"133- Count how many reviews mention each criticism134- Extract the most articulate critical quotes (useful for addressing objections)135136**Surprise themes** — What unexpected reactions appear?137- e.g. "changed my ministry", "read it three times", "assigned in seminary"138139#### 5b — Quotable Lines140Extract the **20 most quotable review excerpts** across all books, ranked by:1411. Specificity (names a concept, not just "great book")1422. Emotional resonance (would make someone want to read the book)1433. Credibility signal (verified purchase, known reviewer, high helpful votes)1444. Brevity (1–3 sentences max)145146Tag each quote with:147- `use_case` — where this quote could appear on the platform:148 - `hero` — powerful enough for the home page149 - `book-detail` — relevant to a specific book page150 - `social-proof` — general credibility signal151 - `course-conversion` — speaks to transformation/formation152 - `ai-lab-trust` — speaks to depth of Alan's work153 - `newsletter` — could entice email subscription154 - `social-media` — shareable as a standalone post155156#### 5c — Reader Language Map157Analyze HOW readers describe Alan and his work in their own words. Extract:158- The 10 most common adjectives readers use159- The 5 most common verbs (what does Alan's work DO to people?)160- The 3 most common comparisons ("like X but Y", "reminds me of Z")161- Terms readers use that Alan himself doesn't use (market language gaps)162- The emotional arc: what did they feel before, during, and after reading?163164This map is gold for copy — it tells you how to speak about Alan in the language his audience already uses.165166#### 5d — Objection Map167From negative and mixed reviews, build an objection map:168- What concerns do people have BEFORE reading? (addressed in marketing copy)169- What frustrates people DURING reading? (addressed in content strategy)170- What do people wish was different AFTER reading? (addressed in course/platform design)171172### Stage 6 — Output173174Save results to `content-library/reviews/{author-slug}/` with these files:175176#### Per-book files:177```178content-library/reviews/alan-hirsch/179├── _manifest.json # Book list with URLs, ISBNs, stats180├── the-mdna.md # All reviews + analysis for this book181├── the-shaping-of-things.md182├── 5q.md183├── the-permanent-revolution.md184├── rejesus.md185├── [other-books].md186├── _editorial-reviews.md # All editorial/professional reviews across books187├── _quotable-lines.md # Top 20 quotes ranked by use case188├── _reader-language-map.md # How readers talk about Alan189├── _objection-map.md # Criticism themes + how to address them190└── _sentiment-summary.md # Cross-book sentiment dashboard191```192193#### Per-book markdown format:194195```markdown196# Reviews: {Book Title}197198**Last scraped**: {date}199**Goodreads**: {rating} avg · {count} ratings · {review_count} reviews200**Amazon**: {rating} avg · {count} ratings201202## Rating Distribution203204| Stars | Goodreads | Amazon |205|-------|-----------|--------|206| 5★ | {n} ({%}) | {n} ({%}) |207| 4★ | {n} ({%}) | {n} ({%}) |208| 3★ | {n} ({%}) | {n} ({%}) |209| 2★ | {n} ({%}) | {n} ({%}) |210| 1★ | {n} ({%}) | {n} ({%}) |211212## Praise Themes213214### {Theme 1} — mentioned in {n} reviews215{Summary of what reviewers say}216217> "{Best quote}" — {reviewer}, {platform}, {rating}★218219> "{Second best quote}" — {reviewer}, {platform}, {rating}★220221### {Theme 2} — mentioned in {n} reviews222...223224## Criticism Themes225226### {Theme 1} — mentioned in {n} reviews227{Summary}228229> "{Representative quote}" — {reviewer}, {platform}, {rating}★230231## Most Helpful Reviews232233### ★★★★★ — {title}234**{reviewer}** · {platform} · {date} · {helpful_votes} helpful235{full text}236237### ★★★★ — {title}238...239240### ★★★ — {title}241...242243### ★★ — {title}244...245246### ★ — {title}247...248249## All Scraped Reviews250251<details>252<summary>{n} reviews collected</summary>253254| # | Platform | Rating | Date | Reviewer | Helpful | Title |255|---|----------|--------|------|----------|---------|-------|256| 1 | Goodreads | 5 | 2024-01-15 | Jane D. | 42 | "Changed my ministry" |257...258259### Review 1260**{title}** · {rating}★ · {reviewer} · {platform} · {date}261{full text}262263### Review 2264...265266</details>267```268269#### _quotable-lines.md format:270271```markdown272# Quotable Review Lines — Alan Hirsch273274**Last updated**: {date}275**Total quotes extracted**: 20276277## Hero-Grade (strongest for home page / marketing)278279> "{quote}" — {reviewer}, reviewing *{book}* ({platform}, {rating}★, {helpful} helpful)280**Use cases**: hero, social-proof281**Why it works**: {1-sentence explanation}282283> ...284285## Book-Specific (for detail pages)286287### The mDNA288> "{quote}" — ...289290### 5Q291> "{quote}" — ...292293## Transformation / Formation (for course pages)294> "{quote}" — ...295296## Social Media Ready (standalone shareable)297> "{quote}" — ...298```299300#### _reader-language-map.md format:301302```markdown303# Reader Language Map — Alan Hirsch304305**Source**: {n} reviews across {m} books306307## How Readers Describe Alan308**Most common adjectives**: {list with counts}309**Most common verbs (what his work does)**: {list}310**Comparisons readers make**: {list}311312## Language Gaps313Terms readers use that Alan/the platform doesn't:314- "{term}" — used by {n} reviewers, appears {0} times on platform315316## Emotional Arc317**Before reading**: {what readers expected or felt}318**During reading**: {what the experience was like}319**After reading**: {how they describe the impact}320321## Copy Implications322{3-5 sentences on how this language map should inform platform copy}323```324325## Key Design Rules326327- **Idempotent** — Safe to re-run. New reviews are appended, stats are updated, existing reviews are not duplicated (match by reviewer + date + first 50 chars of text)328- **Rate-limit respectful** — 3–5 second delays between page loads on Goodreads/Amazon. If blocked, stop and report progress.329- **No login required** — Only scrape publicly visible reviews. Do not attempt to log in to Goodreads or Amazon.330- **Attribution preserved** — Every quote includes reviewer name, platform, date, and rating. Never fabricate or alter review text.331- **Privacy-conscious** — Store reviewer display names only, not profile URLs or identifying information beyond what's publicly displayed332- **Graceful degradation** — If one platform blocks, continue with the other. If a book isn't found, skip and report.333- **Prioritize quality over quantity** — 50 well-chosen, high-signal reviews per book are more valuable than 500 scraped indiscriminately334335## Output Report336337Print a summary after completion:338339```340## Review Scrape Report: {Author Name}341342### Books Processed: {n}343344| Book | Goodreads | Amazon | Editorial | Total |345|------|-----------|--------|-----------|-------|346| The mDNA | 4.08 (87 reviews) | 4.6 (45 reviews) | 8 | 140 |347| ... | ... | ... | ... | ... |348349### Stage 1 — Discovery: OK350- Books in DB: {n}351- Books on Goodreads: {n}352- Books on Amazon: {n}353- Matched: {n}354355### Stage 2 — Goodreads: OK / PARTIAL / BLOCKED356- Reviews scraped: {n} across {m} books357- Blocked on: [list any books where scraping failed]358359### Stage 3 — Amazon: OK / PARTIAL / BLOCKED360- Reviews scraped: {n} across {m} books361362### Stage 4 — Editorial: OK363- Editorial reviews found: {n} across {m} publications364365### Stage 5 — Analysis: OK366- Praise themes identified: {n}367- Criticism themes identified: {n}368- Quotable lines extracted: {n}369370### Output371- Files written to: content-library/reviews/{author-slug}/372- Total files: {n}373374### Warnings375- [any non-blocking issues, rate limiting, missing books, etc.]376377### Next Steps3781. Review `_quotable-lines.md` for copy-ready social proof3792. Review `_reader-language-map.md` to inform platform copy voice3803. Review `_objection-map.md` to address concerns in marketing3814. Use quotes in `/copy-strategy-worksheet` (Parts 2.2, 3.1, 10.2)3825. Consider adding top quotes to `tenant.config.ts` testimonials section383```384385## Anti-Scraping Considerations386387Goodreads and Amazon actively resist scraping. Strategies:3883891. **Use browser tools** (`mcp__chrome-devtools`) rather than raw HTTP — renders JavaScript, handles dynamic loading3902. **Human-like pacing** — 3–5 seconds between page loads, vary the interval3913. **Don't paginate too deep** — Top 100 reviews per book is plenty; going to page 50 will trigger blocks3924. **Fallback to WebSearch** — If direct scraping fails, use `WebSearch` queries like `site:goodreads.com "the forgotten ways" review` to find cached/indexed review content3935. **Accept partial results** — Getting 60% of reviews with high signal is better than getting blocked trying for 100%3946. **Session management** — If using browser, don't clear cookies between requests for the same domain within a run395396## Error Handling397398- Goodreads CAPTCHA / block → log warning, report partial results, suggest retry with `--goodreads-url` for manual URL input399- Amazon bot detection → log warning, continue with Goodreads + editorial only400- Book not found on platform → skip, add to warnings with search terms tried401- Review text truncated and can't expand → save truncated text, flag as `[truncated]`402- Rate limit hit → pause 30 seconds, retry once, then skip to next book403- No reviews found for a book → create empty file with stats only, note in report