Search ChristianPicks for Apps, Software, Businesses, Ministries, Books & Media
Purpose
Search and filter the ChristianPicks directory — a curated
catalog of 500+ Christian products, software, tools, businesses, ministries, books, and
media — by free-text query, category, sub-category, pricing model, popularity, or tag.
Returns product/business summaries (title, slug, logo, verified flag, favorite count) and,
on product detail pages, the full record (description, pricing model, platforms, tags,
categories, vendor website with utm_source=christianpicks.com). Read-only.
When to Use
- A user asks for "the best Christian Bible app", "free Christian finance software", "Christian-owned coffee roasters", "open-source church management tools", etc.
- A user wants to compare two or more Christian products on the same dimension (pricing model, platform, popularity).
- A user wants to discover what categories of Christian software/businesses exist (Software and Apps, Digital Content, Education, Events, Music, Products, Support).
- A user wants the official website of a known Christian product/ministry and you have only its name — the directory's outbound link is canonical and tracked.
- A user wants trending tags or popular keywords across the Christian-tech ecosystem.
Do not use for general Bible-verse lookup, theological Q&A, or sermon search — those have purpose-built sites. ChristianPicks indexes tools and businesses, not content.
Workflow
ChristianPicks exposes one undocumented public JSON endpoint and one set of facet-aware GET URL params on its category listings. Prefer those over scripted browsing — they're ~5× faster, return structured JSON or parseable HTML, and need no session.
1. Fast multi-facet suggestion lookup (preferred for any text query)
GET https://christianpicks.com/api/search/suggestions?q={query}
Accept: application/json
Returns a single JSON envelope with six keyed result groups (top-6 / top-12 hits per group, server-ranked):
| Key | Contents |
|---|---|
products | up to 6 matching products {title, slug, logo, favorite_count, is_verified} |
businesses | up to 6 matching Christian-owned businesses (same shape) |
categories | up to 7 product categories {name, slug, description, product_count} |
business_categories | up to 8 business categories {name, slug, description, business_count} |
trending_tags | up to 12 tags {name, slug, product_count} |
popular_keywords | up to 16 plain strings ("Bible Study", "Worship", "Prayer", …) |
No CSRF, no cookies, no auth. Works from any HTTP client. Empty q returns the editorial
default set (handy as a "what's hot" panel). Rate limit: 30 req/min per IP (the response
echoes X-Ratelimit-Limit and X-Ratelimit-Remaining headers — respect them).
Construct deep links from the slugs:
| Result group | URL |
|---|---|
products[].slug | https://christianpicks.com/products/{slug} |
businesses[].slug | https://christianpicks.com/christian-owned/{slug} (verify per record — some businesses route under /products/{slug}) |
categories[].slug | https://christianpicks.com/categories/{slug} |
business_categories[].slug | https://christianpicks.com/christian-owned/category/{slug} |
trending_tags[].slug | https://christianpicks.com/tags/{slug} |
2. Faceted browse — pricing model + sort
Category listing pages accept GET query parameters; the server re-renders the page with the filter applied. No JS execution required, plain HTML out.
GET https://christianpicks.com/categories/{category-slug}
?revenue_model[]=Free # repeat for multi-select
&revenue_model[]=Freemium
&revenue_model[]=Premium # accepted values: Free | Freemium | Premium
&categories[]={sub-category-slug} # e.g. open-source-bible-apps
&sort=popular # popular | newest | name (A–Z)
&q={text} # in-category text filter
Parse the rendered HTML by extracting /products/{slug} hrefs to enumerate result cards.
Note the site uses URL-encoded %5B%5D in real navigation (revenue_model%5B%5D=Free);
both forms work.
3. Product detail extraction
GET https://christianpicks.com/products/{slug}
Each product page embeds two parseable layers:
- JSON-LD
Productschema in a<script type="application/ld+json">block — yieldsname,description,brand.name,url,image. Easiest structured grab. - Rendered DOM sections for the fields JSON-LD doesn't expose:
<h3>Pricing</h3>→<p>with comma-separated tier list ("Freemium, Paid, One-time", "Free, Open Source", etc.)<h3>Platforms</h3>→ list (iOS, Android, Web, Desktop, Faith-Based, …)<h3>Categories</h3>and<h3>Tags</h3>→ category/tag chips- "Visit Website" anchor → outbound URL with
?utm_source=christianpicks.comappended. Strip that param if you need the canonical vendor URL. is_verifiedbadge on title (matches the API'sis_verifiedboolean).
4. Comparison & recommendation
To compare N products on the same axis:
- Hit
/api/search/suggestions?q=once per candidate name to confirm slugs. - Fetch each
/products/{slug}in parallel. - Extract
description, pricing, platforms, tags, verified-flag, favorite_count. - Rank by
favorite_count(community signal) and/or pricing-tier match.
Browser fallback (only if the above fails)
If you specifically need the rich JS-rendered full-text results page (not the 6-per-group suggestions dropdown), the only viable path is a real browser session:
- Navigate to
https://christianpicks.com/(a remote Browserbase session with--proxiesis fine — site is Cloudflare-fronted but the public pages are bare-friendly). - Click the search affordance ("Search products, businesses…") in the navbar or
press the
⌘K/Ctrl+Kshortcut to open the command palette. - Type the query into the palette
<input>(accessibility role:textbox, placeholder "Search products, businesses…"). Results render inline grouped by Product Categories and SOFTWARE / DIGITAL CONTENT / etc. - Click a result to navigate to its detail page; scrape as in step 3 above.
Do not navigate to https://christianpicks.com/api/search?q={query} as a top-level
URL. That endpoint is only callable as an XHR from the loaded SPA with a valid
CSRF cookie + Origin header — direct navigation (and direct curl) returns 403 Forbidden
with the rendered "403 / Forbidden" error page. See Site-Specific Gotchas.
Site-Specific Gotchas
/api/search/suggestionsis the JSON-out endpoint;/api/searchis not. The endpoint named/api/search?q=looks like a JSON API in the URL space but is actually the SPA's internal partial-HTML fetcher and returns 403 Forbidden on direct GET (no Origin header / wrong CSRF). The truly public JSON sits at/api/search/suggestions. Don't waste cycles trying to coerce/api/search— it's confirmed CSRF-gated.- 30 req/min rate limit on
/api/search/suggestionsper IP. The response headersX-Ratelimit-LimitandX-Ratelimit-Remainingdecrement on every call. On exhaustion expect 429. Cache aggressively if doing fan-out comparison queries. revenue_modelvalues are exactlyFree,Freemium,Premium— three options. The site's own product cards display richer labels like "Paid", "One-time", "Subscription", "Open Source" in their Pricing text block, but those are not filterable values — they're free-form display strings. Filtering by "Paid" viarevenue_model[]=Paidwill return empty.categories[]sub-filter values are slugs of the child categories of the parent category page you're on. On/categories/bible-appsthe validcategories[]slugs arepaid-bible-apps,freemium-bible-apps,free-bible-apps,open-source-bible-apps. You can't pass arbitrary top-level slugs.- Outbound vendor links are tracked. Every "Visit Website" button appends
?utm_source=christianpicks.com(and sometimes&utm_medium=...). Strip these params when reporting the canonical vendor URL to a user, unless you specifically want to honor the directory's referral attribution. - Cloudflare proxy + Laravel session cookies (
XSRF-TOKEN,christianpicks_session) are set on every response but are only required for the CSRF-gated/api/searchendpoint, the suggestion API, and category browsing both work cookieless. Don't add cookie handling unless you've actually been blocked. /products/suggestis not a product — it's the "Suggest a product" form. Any regex like/products/([a-z0-9-]+)will harvest it as a false positive. Filter it out before treating slugs as a result set./search?q=...(no/api/prefix) returns 404. The Schema.orgSearchActionin the homepage JSON-LD advertiseshttps://christianpicks.com/search?q={search_term_string}as the search target — it's misleading. Use the palette (browser) or the suggestions API (HTTP) instead.- Businesses vs. products are separate indexes. Christian-owned businesses live under
/christian-owned/...with their own category tree (/christian-owned/category/{slug}) and their own count field (business_count). A search for "coffee" surfaces both product listings and business listings — distinguish them by which key they came from in the suggestions response. - Sort defaults to
newest. If the user wants community-validated picks, append&sort=popularexplicitly.nameis alphabetical A→Z.
Expected Output
Shape 1 — suggestions (preferred fast path)
{
"query": "worship",
"source": "api/search/suggestions",
"products": [
{
"title": "WorshipTools",
"slug": "worshiptools",
"url": "https://christianpicks.com/products/worshiptools",
"logo": "https://images.christianpicks.com/logos/...png",
"favorite_count": 4,
"is_verified": true
}
],
"businesses": [
{
"title": "Mt. Athos Performance",
"slug": "mt-athos-performance",
"url": "https://christianpicks.com/christian-owned/mt-athos-performance",
"logo": "https://images.christianpicks.com/logos/...png",
"favorite_count": 0,
"is_verified": false
}
],
"categories": [
{
"name": "Software and Apps",
"slug": "software-and-apps",
"url": "https://christianpicks.com/categories/software-and-apps",
"description": "Essential desktop, web, and mobile applications for Bible study, prayer, worship, and church administration.",
"product_count": 186
}
],
"business_categories": [
{
"name": "Media & Podcasting Services",
"slug": "media-podcasting-services",
"url": "https://christianpicks.com/christian-owned/category/media-podcasting-services",
"description": "Media & Podcasting Services",
"business_count": 5
}
],
"trending_tags": [
{ "name": "Worship", "slug": "worship", "url": "https://christianpicks.com/tags/worship", "product_count": 38 }
],
"popular_keywords": ["Bible Study", "Worship", "Prayer", "Discipleship"],
"rate_limit": { "limit": 30, "remaining": 28 }
}
Shape 2 — faceted category browse (pricing + sort)
{
"category": { "name": "Bible Apps", "slug": "bible-apps", "url": "https://christianpicks.com/categories/bible-apps" },
"filters_applied": {
"revenue_model": ["Free", "Freemium"],
"sort": "popular"
},
"results": [
{
"title": "YouVersion Bible",
"slug": "youversion-bible",
"url": "https://christianpicks.com/products/youversion-bible"
},
{
"title": "NET Bible",
"slug": "net-bible",
"url": "https://christianpicks.com/products/net-bible"
}
],
"result_count": 8
}
Shape 3 — product detail (deep dive / comparison)
{
"title": "Accordance Bible Software",
"slug": "accordance-bible-software",
"url": "https://christianpicks.com/products/accordance-bible-software",
"description": "Accordance Bible Software is a leading platform for Bible study, offering a comprehensive suite of tools to facilitate deep scriptural insight...",
"brand": "Independent",
"image": "https://images.christianpicks.com/logos/1749519610-logo-...webp",
"pricing_model_filter": "Premium",
"pricing_display": "Freemium, Paid, One-time",
"platforms": ["Web", "Desktop", "iOS", "Android"],
"categories": ["Bible Study Software", "Software and Apps"],
"tags": ["bible", "study", "software"],
"vendor_url_canonical": "https://www.accordancebible.com",
"vendor_url_tracked": "https://www.accordancebible.com?utm_source=christianpicks.com",
"is_verified": false,
"favorite_count": null
}
Shape 4 — comparison response (composed by the agent from N detail shapes)
{
"query": "best free Christian Bible app for iOS",
"ranked": [
{
"rank": 1,
"title": "YouVersion Bible",
"url": "https://christianpicks.com/products/youversion-bible",
"vendor_url_canonical": "https://www.youversion.com",
"pricing_display": "Free",
"platforms": ["iOS", "Android", "Web"],
"favorite_count": 12,
"is_verified": true,
"why": "Free across all platforms, highest community favorites, verified listing."
},
{
"rank": 2,
"title": "NET Bible",
"url": "https://christianpicks.com/products/net-bible",
"vendor_url_canonical": "https://netbible.com",
"pricing_display": "Free",
"platforms": ["Web", "iOS"],
"favorite_count": 3,
"is_verified": false,
"why": "Free, ships translation notes; lower community signal than YouVersion."
}
]
}
Shape 5 — no-hits
{
"query": "byzantine icon embroidery kits",
"source": "api/search/suggestions",
"products": [],
"businesses": [],
"categories": [],
"business_categories": [],
"trending_tags": [],
"popular_keywords": ["Bible Study", "Worship", "Prayer"]
}
Note: even on zero hits, popular_keywords still returns the editorial defaults — treat
them as suggestions, not as positive matches. Decide "no result" based on products,
businesses, categories, business_categories and trending_tags all being empty.