Compare insurance carriers on Policygenius (life, auto, home, renters, disability) and return Policygenius rating, AM Best, J.D. Power, NAIC complaint index, pros/cons, Best-for tag, and last-reviewed date per carrier. Editorial-only; never enters the PII-gated quote funnel.
Automate repetitive workflows and reduce manual effort
Example: Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example: Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example: Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
Time estimate: 15-45 minutes depending on use case complexity
Prerequisites
Submit your Claude Code skill and start earning
browse install policygenius.com/compare-insurance-g7soghCompatible with
Supported agents
| name | compare-insurance |
| title | Policygenius Insurance Comparison |
| description | >- Compare insurance carriers on Policygenius (life, auto, home, renters, disability) and return Policygenius rating, AM Best, J.D. Power, NAIC complaint index, pros/cons, Best-for tag, and last-reviewed date per carrier. Editorial-only; never enters the PII-gated quote funnel. |
| website | policygenius.com |
| category | insurance |
| tags | - insurance - comparison - carriers - ratings - read-only |
| source | 'browserbase: agent-runtime 2026-05-16' |
| updated | '2026-05-16' |
| recommended_method | hybrid |
| alternative_methods | - method: api rationale: >- Direct HTTPS GET of Policygenius editorial URLs returns clean static HTML with JSON-LD Product/Review and InsuranceAgency schema blocks. No session, no JS-rendering. Treat the URL templates in the Workflow as the API contract. - method: url-param rationale: >- Per-product / per-state / per-city best-of URLs are deterministic slug templates — given a product + region, the canonical URL is constructible without any discovery step. - method: browser rationale: >- Only required when browse cloud fetch hits its 1 MB body cap (homeowners review index) or when burst-fetch volume triggers Fastly soft-throttling. Never used to drive the quote funnel — that path is robots-disallowed and requires PII. |
| verified | false |
| proxies | false |
Given a product intent (life, auto, home, renters, disability), a free-form
policy description, a carrier name, or a Policygenius product URL — return the
matching Policygenius-reviewed carriers as structured JSON: name, logo,
canonical review URL, Policygenius rating (decimal stars), pros / cons, AM Best
financial-strength rating, J.D. Power score, NAIC complaint index, "Best for"
editorial tag, and last-reviewed date. Read-only — never click Apply,
Continue, Get a quote, or any funnel CTA, and never submit a real applicant
profile.
This skill returns Policygenius's editorial comparison data (carrier reviews
Not for: live premium quotes, binding policies, or any flow that requires submitting applicant demographics. Those are out of scope by design — see Gotchas.
The optimal path is direct HTTP fetch of Policygenius's editorial pages —
they are static, server-rendered HTML with JSON-LD Product/Review and
InsuranceAgency schema blocks for every reviewed carrier. No anti-bot, no
JavaScript-rendering required, no session needed. Use browse cloud fetch <url> (or any
plain HTTPS client) — a Browserbase session is only required for the
fallback path below.
| Input shape | → Resolution |
|---|---|
Full /{product}-insurance/reviews/{carrier}/ URL | Skip to step 3 (carrier detail). |
Full /{product}-insurance/best-…/ URL | Skip to step 4 (best-of list). |
| Product intent ("term life", "homeowners", …) | Map to one of the product slugs below. |
| Free-form description | Extract product + sub-product + state/city; map to product slug + best-of URL. |
| Carrier name ("Lemonade renters", "Haven Life term") | Map to /{product}-insurance/reviews/{kebab-case-name}/. Confirm via step 2. |
Product-slug table (the {product} URL fragment):
| Intent | Product slug | Reviews coverage |
|---|---|---|
| Term / Whole / UL / No-medical Life | life-insurance | Full (~30 carriers) |
| Auto / Car | auto-insurance | Full (~30 carriers) |
| Homeowners / Condo | homeowners-insurance | Full (~30 carriers) |
| Renters | renters-insurance | Full (~10 carriers) |
| Long-term Disability | disability-insurance | Limited (6 carriers) |
| Pet (dog/cat) | pet-insurance | None — see Gotchas |
| Health | health-insurance | None — see Gotchas |
| Travel | travel-insurance | None — see Gotchas |
Two equivalent discovery surfaces; prefer (a) for the simple list, (b) for a ranked list with editorial "Best for X" tags:
(a) Carrier review index — every reviewed carrier slug for that product:
GET https://www.policygenius.com/{product}/reviews/
Carrier slugs appear as href="/{product}/reviews/{slug}/". Extract with:
/{product}/reviews/([a-z0-9][a-z0-9-]+)/
Drop the synthetic slug methodology and any {a}-vs-{b} head-to-head slugs.
⚠️ The homeowners review index is >1 MB and exceeds
browse cloud fetch's 1 MB body cap (server returns:502 The response body exceeded the maximum allowed size of 1MB. Use a browser session to handle large responses.). Two workarounds: (i) enumerate via the sitemap athttps://www.policygenius.com/sitemap-0.xml(~3 k URLs, 385 KB — fits) and filter for the/{product}/reviews/{slug}/shape; or (ii) drive a real Browserbase session for that one page. The auto / life / renters / disability indexes fit under the cap and need no workaround.
(b) National best-of page — ranked list + per-carrier "Best for X" callout:
| Product | Canonical national best-of URL |
|---|---|
| Auto | /auto-insurance/best-car-insurance-companies/ |
| Life (umbrella) | /life-insurance/best-life-insurance-companies/ |
| Life (term) | /life-insurance/best-term-life-insurance-companies/ |
| Life (whole) | /life-insurance/best-whole-life-insurance-companies/ |
| Life (no-med-exam) | /life-insurance/no-medical-exam-life-insurance/ |
| Homeowners | /homeowners-insurance/best-homeowners-insurance-companies/ |
| Disability (LTD) | /disability-insurance/best-disability-insurance-companies/ |
| Renters (national) | Not published. Use the renters review index (step 2a) + city pages (step 2c). |
Each best-of page embeds multiple <script type="application/ld+json">
blocks: one Article wrapper plus one InsuranceAgency per ranked carrier
(name, logo URL, canonical review URL). Editorial "Best for X" tags live in
sibling <h2>/<h3> headings of the shape:
<h2>1. Best overall coverage: Openly</h2>
<h2>2. Best for homeowners with poor credit: Travelers</h2>
Match with: ^(\d+)\.\s*Best\s+([^:]+):\s*(.+)$ to split rank, category,
carrier.
(c) Region best-of — state or city scoped:
| Product | Pattern |
|---|---|
| Auto state | /auto-insurance/best-car-insurance-in-{state-name-lower}/ |
| Auto city | /auto-insurance/best-car-insurance-in-{city-fl}/ (Naples FL, …) |
| Homeowners | /homeowners-insurance/{state-name-lower}/best-companies/ |
| Renters city | /renters-insurance/best-renters-insurance-in-{city-lower}/ |
State / city slugs are lower-kebab-case; some auto-city slugs append the
state abbreviation (naples-fl, aurora-co). Cross-check existence against
the sitemap before fetching. A 404 returns a 41,008-byte branded
not-found page, not an HTTP 404 status from Policygenius's CDN — but the
browse cloud fetch response does carry the correct upstream 404 statusCode. Check
statusCode === 200 before parsing.
GET https://www.policygenius.com/{product}/reviews/{carrier-slug}/
Each page has exactly one <script type="application/ld+json"> block —
parse it as JSON and pull from the top-level / @graph[0] object:
| Field | JSON-LD path |
|---|---|
| Carrier full name | name (strip the trailing " – Policygenius" suffix) |
| Policygenius rating | review.reviewRating.ratingValue (decimal, 1–5) |
| Best-rating denominator | review.reviewRating.bestRating (always "5") |
| Pros | review.positiveNotes.itemListElement[].name |
| Cons | review.negativeNotes.itemListElement[].name |
| Last-reviewed date | review.dateModified (ISO YYYY-MM-DD) |
| First-published date | review.datePublished |
| Review author | review.author.name |
| Canonical review URL | url |
| Description blurb | description |
Logo URLs live in the InsuranceAgency schema blocks on the parent best-of
page, not on the carrier's own review page. To get a logo: hit the matching
best-of page and look up the carrier's image.url (always a
https://images.ctfassets.net/3uw9cov4u60w/... Contentful URL — that prefix is
a stable identifier of "Policygenius-CMS-hosted logo").
Body-prose extraction — the following fields are not in JSON-LD and must
be regex-pulled from the rendered prose. Treat all as best-effort; surface
null when absent:
| Field | Regex (case-insensitive, first match) |
|---|---|
| AM Best rating | `AM Best[^.]*?\b(A++? |
| J.D. Power score (0–1000) | J\.?D\.? Power[^.]*?\b([5-9][0-9]{2})\b |
| NAIC complaint index | (?:NAIC|complaint index)[^.]*?\b([0-9]+\.[0-9]{1,2})\b |
| Money-back / free-look | (?:money-back|free[ -]look)[^.]*?\b(\d{1,3})\s*(?:day|days)\b |
| Application time | application[^.]*?\b(\d{1,3})\s*(?:minute|minutes|hour|hours|day|days)\b |
| Medical exam required | Presence of "no medical exam" → false; "requires a medical exam" → true; else null. |
On a best-of page, walk DOM-order through h2/h3 headings matching
/^\d+\.\s*Best\s+([^:]+):\s*(.+?)$/. The carrier name in the heading is the
InsuranceAgency.name (without the ~~~Insurance~~~ suffix some agencies
carry) — fuzzy-match to the JSON-LD blocks on the same page to resolve the
canonical review URL + logo.
Anchors with link text matching /^(Apply|Continue|Get (a )?quote|Compare quotes|See rates|Start saving)/i are Policygenius's underwriter-affiliate
funnel entry points. Their href values point either at /life-insurance/start,
/auto-insurance/quotes/, /homeowners-insurance/quotes/,
/life-insurance/quotes/, or at an external partner domain.
Emit them as apply_url on the carrier record with apply_url_is_affiliate: true, but do NOT follow the redirect — the destination is the funnel form
that this skill is forbidden from submitting, and the link is robots-disallowed
(see Gotchas).
Merge the per-carrier records pulled in step 3 with the editorial best-of tags
from step 4 and the logos / canonical-review-URLs from the InsuranceAgency
blocks. Sort by Policygenius_rating descending unless the caller requested
otherwise.
The static path fails only in two known cases: (a) the homeowners review index exceeds the 1 MB Fetch-API body cap, and (b) one or more individual carrier pages temporarily serve from a cold edge cache and return partial HTML. Both recover with a real Browserbase session:
SID=$(browse cloud sessions create --keep-alive --verified --proxies | python3 -c \
"import json,sys; print(json.load(sys.stdin)['id'])")
browse --connect "$SID" open "https://www.policygenius.com/{product}/reviews/" --wait load
browse --connect "$SID" get html body > /tmp/page.html
browse cloud sessions update "$SID" --status REQUEST_RELEASE
--verified and --proxies are recommended (not required) — bare
sessions worked in our probes but Policygenius is fronted by Fastly + Varnish
and starts soft-throttling at ~10 req/min from a single IP. Use Verified + proxy
when you expect to fetch >20 pages in a burst, or when a bare fetch starts
returning truncated bodies. Never drive the browser into a quote funnel,
even with the most permissive session — see Gotchas.
The quote funnel is robots-disallowed AND requires real PII — never enter
it. Policygenius's /robots.txt explicitly Disallows every quote /
application / estimation path:
/life-insurance/quotes/, /life-insurance/application,
/life-insurance/estimation, /life-insurance/comparison,
/life-insurance/start, /homeowners-insurance/quotes/,
/auto-insurance/quotes/, /wills/create/, plus all */exit-survey/* and
*/health/ subpaths. The funnel pages themselves are full SPAs that require
date-of-birth, SSN-region, ZIP, vehicle VIN (auto), or home address (home)
before yielding any pricing — none of which this skill is permitted to submit.
If a caller asks for "live quotes", return a stub:
{ "success": false, "reason": "quote_funnel_requires_pii_and_is_robots_disallowed" }.
browse cloud fetch has a 1 MB body cap. The homeowners review index
(/homeowners-insurance/reviews/) returned the literal upstream string
502 The response body exceeded the maximum allowed size of 1MB. Use a browser session to handle large responses. Workaround: enumerate carrier
slugs from https://www.policygenius.com/sitemap-0.xml (385 KB, fits)
instead, or fall through to a Browserbase session for that one page. Auto,
life, renters, and disability indexes all fit under the cap.
Pet, health, and travel insurance have no carrier-review pages.
/pet-insurance/, /health-insurance/, and /travel-insurance/ are
editorial article landing pages with zero InsuranceAgency schema blocks
and no /reviews/{slug}/ subpaths in the sitemap. Pet insurance is delegated
to MarketWatch's pet guide (link in the page body); Policygenius does not
underwrite or compare pet/health/travel carriers directly. The skill must
return { "success": false, "reason": "product_not_covered", "product": "pet|health|travel" } for these three verticals — do NOT attempt to scrape
the body prose into a fake carrier list.
Carrier review pages have exactly one JSON-LD block; best-of pages have
10–15. A best-of page contains: one Article (the wrapper), zero or one
FAQPage, one or more ImageObject, and one InsuranceAgency per ranked
carrier. Parse every block — discard parse failures silently — and pick out
the InsuranceAgency entries.
JSON-LD InsuranceAgency.name sometimes has trailing whitespace ("Openly ", "Nationwide ", "Amica "). Always .trim() before matching against
the "Best for X: Carrier" heading text.
<title> is the source-of-truth for the page's editorial title, but it is
appended with " – Policygenius" (en-dash + space). Strip the suffix
before emitting. The JSON-LD name field has the same suffix.
AM Best / J.D. Power / NAIC values are in body prose, not in JSON-LD. The
regexes in the Workflow table get the values right ~90 % of the time but will
occasionally match the wrong number (e.g. an AM Best A++ from a sentence
about a parent company rather than the reviewed carrier). For
high-accuracy use cases, emit the matched substring's context window (±60
chars) as a _provenance field so downstream callers can sanity-check.
/{product}/{state}/best-companies/ is the homeowners state-best-of
pattern; auto uses /auto-insurance/best-car-insurance-in-{state}/ instead.
Two different conventions in the same site. Renters uses city-not-state
slugs (/renters-insurance/best-renters-insurance-in-{city}/). When in
doubt, query the sitemap.
A 404 from Policygenius returns a 41,008-byte branded "page not found"
page, not a small error blob. The HTTP statusCode is correctly 404 in the
browse cloud fetch response envelope — check statusCode === 200 before parsing,
don't rely on body length.
Sub-product life URLs are mostly distinct pages, but no-medical-exam
lives at /life-insurance/no-medical-exam-life-insurance/ — not at
/life-insurance/best-no-medical-exam-life-insurance-companies/ (404). The
product table in the Workflow lists the canonical URLs.
"Apply" / "Continue" / "Get a quote" anchors are affiliate URLs. Capture
the href but never GET or browse open them — both because (a) the
destination is a robots-disallowed funnel and (b) following affiliate links
artificially inflates Policygenius's referral metrics. Emit them with
apply_url_is_affiliate: true so downstream consumers can choose whether to
surface them.
Some reviewed carriers are no longer accepting applications (e.g. Haven
Life as of 2024-01-03 per its review's dateModified). The carrier review
still loads, with positive/negative notes intact, but there is no "Apply"
CTA. Surface this as accepting_applications: false when the page title or
H1 contains the phrase "no longer accepting applications".
review.dateModified is the editorial-review date, not the rating-as-of
date. Some carrier reviews go 12+ months between dateModified updates
while their AM Best / J.D. Power values change quarterly. Treat the JSON-LD
rating as "Policygenius's view at last editorial review" — flag stale records
(dateModified > 18 months ago) in the response.
Logo URLs are Contentful-hosted with a stable prefix
(https://images.ctfassets.net/3uw9cov4u60w/...). The path component
contains a Contentful asset ID + filename — both URL-safe to embed in
downstream JSON, no signed-URL expiry to worry about.
Five distinct outcome shapes. All return success: true except the two stub
shapes (product_not_covered, quote_funnel_requires_pii_and_is_robots_disallowed).
{
"success": true,
"product": "homeowners-insurance",
"source_url": "https://www.policygenius.com/homeowners-insurance/best-homeowners-insurance-companies/",
"carriers": [
{
"rank": 1,
"best_for_tag": "overall coverage",
"name": "Openly",
"carrier_slug": "openly",
"logo_url": "https://images.ctfassets.net/3uw9cov4u60w/4YeN9dkRRN27awXKeKL4xT/...",
"review_url": "https://www.policygenius.com/homeowners-insurance/reviews/openly/",
"policygenius_rating": 4.6,
"policygenius_rating_max": 5,
"am_best_rating": "A",
"jd_power_score": null,
"naic_complaint_index": 0.42,
"pros": ["Generous coverage limits", "..."],
"cons": ["Only available in 21 states", "..."],
"last_reviewed": "2024-05-31",
"apply_url": "/homeowners-insurance/quotes/?carrier=openly",
"apply_url_is_affiliate": true,
"accepting_applications": true
}
]
}
{
"success": true,
"product": "renters-insurance",
"carrier": {
"name": "Lemonade",
"carrier_slug": "lemonade",
"review_url": "https://www.policygenius.com/renters-insurance/reviews/lemonade/",
"policygenius_rating": 4.4,
"policygenius_rating_max": 5,
"am_best_rating": null,
"jd_power_score": null,
"naic_complaint_index": null,
"pros": ["Fast app-based claims", "..."],
"cons": ["Only available in 28 states + DC"],
"review_author": "Jessica Olivo",
"last_reviewed": "2023-11-20",
"first_published": "2020-04-08",
"apply_url": "https://www.lemonade.com/...",
"apply_url_is_affiliate": true,
"accepting_applications": true,
"description": "Tech-friendly fast coverage..."
}
}
{
"success": true,
"product": "homeowners-insurance",
"best_for_picks": [
{ "rank": 1, "category": "overall coverage", "carrier_slug": "openly", "carrier_name": "Openly" },
{ "rank": 2, "category": "overall for customer satisfaction", "carrier_slug": "amica", "carrier_name": "Amica" },
{ "rank": 3, "category": "homeowners with poor credit", "carrier_slug": "travelers", "carrier_name": "Travelers" },
{ "rank": 4, "category": "option if you've had a lapse in coverage", "carrier_slug": "stillwater", "carrier_name": "Stillwater" },
{ "rank": 5, "category": "homes with a history of claims", "carrier_slug": "foremost", "carrier_name": "Foremost" }
]
}
{
"success": false,
"reason": "product_not_covered",
"product": "pet-insurance",
"note": "Policygenius does not maintain carrier reviews for pet, health, or travel insurance. Pet comparison is delegated to MarketWatch's guide; health insurance is not sold direct."
}
{
"success": false,
"reason": "quote_funnel_requires_pii_and_is_robots_disallowed",
"note": "Live premium quotes require submitting date-of-birth, ZIP, and (for auto/home) vehicle/property identifiers through Policygenius's funnel at /{product}/quotes/. That path is disallowed by robots.txt AND requires PII this skill is not permitted to submit. Use the editorial carrier-review data above as decision input, then refer the user to https://www.policygenius.com/ to complete the funnel manually."
}
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versioncompare-insuranceExecute the skills CLI command in your project's root directory to begin installation:
browse install policygenius.com/compare-insurance-g7soghFetches compare-insurance from policygenius.com/compare-insurance-g7sogh and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
.cursor/skills/compare-insurance
Restart Cursor to activate compare-insurance. Access via /compare-insurancein your agent's command palette.
Learn more:View source on GitHubSkills CLI docsAbout CursorWhat are agent skills?
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
search-compare-monitor
mercadolibre.com.ar/search-compare-monitor-n9hgxe · marketplace · 2 shared tags
find-book
goodreads.com/find-book-nycdz1 · books · 2 shared tags
design-an-interface
explainx/design-an-interface · design · tag: comparison
track-live-scores
livescore.com/track-live-scores-txxdp5 · sports · tag: read-only
search-products
shopee.com.my/search-products-5epzg0 · marketplace · tag: read-only
search-products
zepto.com/search-products-wtqzgb · quick-commerce · tag: read-only
We added compare-insurance from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
compare-insurance fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
Registry listing for compare-insurance matched our evaluation — installs cleanly and behaves as described in the markdown.
compare-insurance fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
compare-insurance reduced setup friction for our internal harness; good balance of opinion and flexibility.
Registry listing for compare-insurance matched our evaluation — installs cleanly and behaves as described in the markdown.
Registry listing for compare-insurance matched our evaluation — installs cleanly and behaves as described in the markdown.
compare-insurance reduced setup friction for our internal harness; good balance of opinion and flexibility.
compare-insurance reduced setup friction for our internal harness; good balance of opinion and flexibility.
We added compare-insurance from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
showing 1-10 of 62