Score your content
Paste body text or enter a URL · select a target keyword · get a local legal readiness score
Practice area *
Target keyword *
Suggested keywords —
✕
Generated from firm profile · wanted case types · service cities · sitemap gaps · competitors
Page body content *
0 words
Use # for H1 · ## for H2 · ### for H3
Firm context Auto-loaded
Ragab Law Firm
Market
Denver, CO · Mid-size
State bar
Colorado
This page targets — Wanted case types
Business Litigation
Criminal Defense
Personal Injury
Select the case type this specific page targets — narrows avatar and quality context
Unwanted case types — always excluded
Loads from firm profile
Target city — score this page for Denver
Denver ●
Aurora
Lakewood
Select one city — the score reflects local pack readiness for that specific location. Run again for each additional city.
Client avatar
Select a single case type above to load the avatar for this practice area
Attorney
—
Competitors
—
Generate report
Select type and firm · upload data · generate
Report type *
📈
PPC Audit
Search terms + campaign data
🔍
Local SEO Audit
Ahrefs + Google Search Console
◎
LexScore
Page content · local ranking score
Upload data — PPC Audit
↧
Search terms report *
Google Ads Reports → Search Terms → Export · campaign names auto-detected
↧
Campaign performance CSV *
Impressions, clicks, conversions, cost by campaign
↧
Geographic report optional
Out-of-area waste analysis
Generation pipeline
01 Input
Upload
CSV parsed, type confirmed
›
02 Enrich
Firm profile
Case types + type-specific config
›
03 Assemble
Prompt build
Shared block + type module
›
04 Analyze
Claude API
Structured JSON output
›
05 Render
Report HTML
Type-specific dashboard
›
06 Store
Supabase log
Archived, last 12 surfaced
Ragab Law Firm
Firm details
Locations
Used for NAP consistency checks, local pack targeting, and geographic waste analysis in PPC
Select a firm to load locations
Competitors
Domains are used for Ahrefs gap analysis · GBP URLs are used for review velocity comparison
Select a firm to load competitors
Case types — shared across all reports
Injected into every PPC, SEO, and future report automatically
Wanted case types
Drives scale/defend recommendations in PPC · keyword gap framing in SEO · used by all report types
3 loaded
↧
wanted_cases.csv
One case type per row · e.g. Personal Injury, Business Litigation, Criminal Defense
Personal Injury
Business Litigation
Criminal Defense
Unwanted case types
Drives negative keyword logic in PPC · flags accidental organic ranking in SEO · used by all report types
3 loaded
↧
unwanted_cases.csv
One case type per row · e.g. Workers Comp, Medical Malpractice, Lemon Law
Workers Comp
Medical Malpractice
Lemon Law
Lead quality feedback — by practice area
Update monthly · last updated Apr 2026
Free-text observations on what's actually calling in · injected into every report to calibrate AI recommendations beyond stated intent
ℹThese notes close the gap between what you're targeting and what's actually calling. The AI uses them to recalibrate — flagging keywords, content, and spend that attract low-quality variants of wanted cases even when the practice area itself is correct. One field per practice area. Plain language is fine.
Client avatars — by practice area
Injected into AI prompts to filter recommendations by ideal client profile and case value — not just case type
ℹPPC-specific config: These fields are only injected when a PPC Audit is generated. Case types are managed on the Overview tab and are automatically included. Campaign lists are auto-detected from the uploaded search terms CSV.
Campaign daily budgets
Expected / wk = Daily budget × 7 · auto-detected from last search terms upload
Campaign name
Daily budget ($)
Expected / wk
Actual spend
Status
Red = budget exhausting before EOD. Increase daily budget or cut waste to reclaim afternoon visibility.
PPC location targeting
Import your active location targets from Google Ads · used for geographic waste detection in PPC reports
↧
Google Ads location targets CSV
Campaigns → Settings → Locations → Download
Impressions from locations not on this list are flagged as geographic waste in the PPC report.
Branded keywords
Separates brand from generic traffic — used for CPL comparison and brand protection analysis
3 loaded
↧
branded_keywords.csv
Export from Google Ads · filter by label or campaign
ragab law
ragab attorney
ragab firm
Broad match keywords
Flagged for extra n-gram scrutiny — most likely to generate toxic query variants
3 loaded
↧
broad_match_keywords.csv
Filter by match type = Broad in Google Ads · export keyword list
lawyer
attorney
legal
Search presence
Site content URLs
Not verified · paste URL and click Verify to confirm it's accessible
Not verified
What the AI does with these
XML sitemap → discovers every page URL · maps practice area pages vs. location pages vs. blog posts · builds the keyword ownership structure automatically · detects which URLs compete for the same intent
Blog URL → crawls post titles and slugs · flags blog posts that could cannibalise practice area pages · identifies content gap opportunities where a blog post exists but no pillar page does
Blog URL → crawls post titles and slugs · flags blog posts that could cannibalise practice area pages · identifies content gap opportunities where a blog post exists but no pillar page does
Keyword ranking data
Uploaded once per reporting cycle · the SEO report reads the most recent file for each source
↧
Ahrefs — organic keyword export
Site Explorer → Organic keywords → Export CSV · used for ranking positions, traffic estimates, and competitor keyword gap analysis
↧
BrightLocal — local rank tracker export
Rankings → Export · includes local pack positions, map pack visibility, and city-by-city rank breakdown · used for local pack eligibility scoring
Report history — coming next
All reports
47 total · all firms · all types
Scheduled reports
Auto-generation · runs at 6am firm local time
| Firm | Type | Cadence | Day | Next run | Last run | Status | Actions |
|---|---|---|---|---|---|---|---|
| Ragab Law Firm | PPC | Weekly | Monday | Apr 28 | Apr 21 | ● Active | |
| Ragab Law Firm | SEO | Bi-weekly | Monday | Apr 28 | Apr 14 | ● Active | |
| Morrison & Assoc. | PPC | Weekly | Tuesday | Apr 29 | Apr 18 | ⏸ Paused |
ℹHow it works: Each type defines required uploads, which firm profile fields it draws from, and which prompt module activates. The shared firm context block (case types, avatars, lead quality, competitors) is always injected first, then the type-specific module loads on top.
📈
● Active
PPC Audit
Google Ads search term analysis. Waste, n-gram toxic roots, funnel mapping, and 30-day reallocation forecast.
Uploads required
Search terms report CSV
Campaign performance CSV
Geographic report (optional)
🔍
● Active
Local SEO Audit
Keyword gap analysis, content decay, GBP health, competitor content comparison using Ahrefs + GSC + BrightLocal.
Uploads required
Ahrefs site export CSV
Google Search Console export
BrightLocal export (optional)
◎
● Active
LexScore
Per-page local ranking readiness. 5-dimension score calibrated against firm avatars, lead quality, and target city. No file upload needed.
Input required
Page content (paste or crawl URL)
Practice area + target city
Firm profile auto-loads
Shared firm context — injected into every report type
Always included
Firm name · market type · service area
State bar · market position · competitors
Wanted case types · Unwanted case types
Client avatars · lead quality feedback
State bar · market position · competitors
Wanted case types · Unwanted case types
Client avatars · lead quality feedback
Type-specific (added on top)
PPC: branded KWs · broad match KWs · campaign budgets · location targets
SEO: sitemap · blog URL · Ahrefs + BrightLocal data · competitor page URLs
LexScore: page content · selected city · practice area avatar
SEO: sitemap · blog URL · Ahrefs + BrightLocal data · competitor page URLs
LexScore: page content · selected city · practice area avatar
All firms
12 active clients
| Firm | Market | Wanted cases | Daily budget | Last PPC | Last SEO | Actions |
|---|
ℹHow prompts work: The shared context block is always assembled first from the firm profile. Each report type then appends its type-specific module. Edit the instruction text below and save — overrides are stored locally and sent to the edge function on the next report generation. The JSON output schema (at the bottom of each prompt) must not be changed or report rendering will break.
Block 1 — Shared firm context
Always injected first · populated automatically from firm profile · not editable
firm.name · firm.settings.attorney_name · config.market_type · config.state_bar
config.website_url · config.market_position
locations[] → primary office + service cities
competitors[] → name + domain for each
config.wanted_cases[] · config.unwanted_cases[]
avatars[] → who_they_are · problem · anti_avatar · avg_case_value per practice area
config.lead_quality{} → quality notes per practice area
config.website_url · config.market_position
locations[] → primary office + service cities
competitors[] → name + domain for each
config.wanted_cases[] · config.unwanted_cases[]
avatars[] → who_they_are · problem · anti_avatar · avg_case_value per practice area
config.lead_quality{} → quality notes per practice area
PPC Audit
Block 2A — PPC analysis instructions
Edit the analysis instructions. The shared firm context and CSV data are appended automatically before this text. Do not edit the JSON schema section at the bottom.
Data appended after your instructions
Branded keywords list · Broad match keywords · Campaign daily budgets · PPC location targets · Search terms CSV (up to 8,000 chars) · Campaign performance CSV · Geographic report CSV
Local SEO Audit
Block 2B — SEO analysis instructions
Edit the analysis instructions. Shared context, competitor page URLs, and all uploaded data files are appended automatically.
Data appended after your instructions
GBP URL · GSC property · Sitemap URL · Blog URL · Competitor page URLs · Ahrefs export (up to 8,000 chars) · GSC export (up to 6,000 chars) · BrightLocal export
LexScore
Block 2C — LexScore scoring instructions
Edit the scoring instructions. The firm context, matching avatar, lead quality note, selected city, and page content are appended automatically.
Context appended after your instructions
Selected practice area · Matching client avatar (full) · Lead quality note for PA · Target city (single) · Keyword + keyword source · Full page content
Schema reference
firms — id · name · slug · settings · accent_color · logo_url · owner_email · plan · status
firm_report_config — firm_id · wanted_cases[] · unwanted_cases[] · market_type · state_bar · website_url · market_position · gbp_url · gsc_property · branded_keywords[] · broad_keywords[] · campaign_budgets[] · ppc_locations[] · lead_quality{} · target_keywords[]
firm_locations — id · firm_id · city · state · zip · address · phone · is_primary · has_office
firm_competitors — id · firm_id · name · domain · gbp_url
firm_avatars — id · firm_id · practice_area · avatar_name · who_they_are · problem · how_they_search · anti_avatar · avg_case_value
reports — id · firm_id · report_type · status · health_score · waste_identified · keyword · page_url · practice_area · period_start · period_end · created_at
firm_report_config — firm_id · wanted_cases[] · unwanted_cases[] · market_type · state_bar · website_url · market_position · gbp_url · gsc_property · branded_keywords[] · broad_keywords[] · campaign_budgets[] · ppc_locations[] · lead_quality{} · target_keywords[]
firm_locations — id · firm_id · city · state · zip · address · phone · is_primary · has_office
firm_competitors — id · firm_id · name · domain · gbp_url
firm_avatars — id · firm_id · practice_area · avatar_name · who_they_are · problem · how_they_search · anti_avatar · avg_case_value
reports — id · firm_id · report_type · status · health_score · waste_identified · keyword · page_url · practice_area · period_start · period_end · created_at
System settings
Default report tone
Balanced — findings + context
Default report period
Last 7 days (weekly)
Auto-save drafts
Saves generate form state between sessions
Report notifications
Email when scheduled reports complete
LexScore keyword suggestions
Use AI to suggest keywords from firm profile
Account
?
—
—