Ranqly features
Ranqly is marketing software for local home-service businesses — HVAC, plumbing, electrical, and similar trades — that automates Google Business Profile content, local SEO websites, ZIP-level rank tracking, and lead attribution. Teams use it instead of a large agency retainer to stay visible on Google and, increasingly, in AI assistants such as ChatGPT and Perplexity.
Platform capabilities
-
AI marketing agent
Generates and schedules social posts, GBP updates, and trade-specific content with GEO-optimized structure (quotable facts, FAQs, local entity signals). Facebook and Instagram publishing and Google Business Profile are connected from your settings and can be disconnected any time
-
Ranqly Comms — team communication for field crews
Walkie-talkie push-to-talk voice with AI transcription, offline messaging that survives attics and dead zones, ServiceTitan job channels with per-customer history, and an AI assistant that answers from live job data, coaches from the company's own playbooks, and watches closed jobs for missed invoices and open estimates. Learn about Ranqly Comms.
-
Google Business Profile workflows
Profile optimization, posting, and multi-location support; free GBP audit tool for readiness scoring.
-
Autopublished local SEO websites
Service-area pages, blog, sitemap, schema markup, and
llms.txtfor AI crawlers on customer domains. -
Local rank tracking
ZIP-level visibility measurement and expansion-advisor recommendations.
-
Sales agent & lead attribution
Aggregator and ServiceTitan lead handling, SMS conversations, and source clarity for marketing ROI.
-
AI visibility measurement
Optional weekly probes across ChatGPT-style, Gemini, and Perplexity engines to track brand mentions and citations.
Recent releases
-
More reliable account alerts
Ranqly's in-app alerts for account-wide events now reach administrators reliably.
-
Clearer signup tracking for ChatGPT ads
Free trials that start from ads inside ChatGPT are now reported to the ad platform correctly, so campaigns can measure and optimize for real signups.
-
Comms points techs to teammates who've fixed the same problem
When a technician describes a problem in a job chat, Ranqly's assistant can now mention a teammate who solved something similar at another customer, so they can ask them directly. Scheduled posting is also more reliable.
-
Private office threads in Ranqly Comms
Your business tools can now send each technician a private card in Ranqly Comms, such as a weekly timesheet to confirm, that only that technician can answer and that Ranqly's AI never reads.
-
Social posts no longer invent staff names
Posts about your team use "our technician" unless you've named staff in your business profile, and approval emails now say why a draft was held for review.
-
More reliable scheduled publishing
Ranqly now keeps database capacity reserved for scheduled marketing jobs and customer requests at the same time, so posts publish on schedule even during the busiest overnight hours.
-
Clearer publishing status for marketing posts
Ranqly's publishing log now says plainly when a business has no drafts waiting, instead of reporting a quality-score problem, so it's quicker to see why a post did or didn't go out.
-
Faster websites for Ranqly customers
Websites Ranqly builds for home-service businesses now load the online booking widget only when a visitor is ready to use it, so pages respond sooner on phones. Logos are sized for the page, and footer text is easier to read.
-
Marketing posts never invent customer stories
Ranqly now holds any post that tells a named person's story, such as a teacher or homeowner, unless that person is in the business's own profile. Generated posts stay truthful even when they're written to engage.
-
Safer marketing posts for healthcare practices
Ranqly now writes and reviews posts for chiropractors, physical therapists, dentists and other clinics under healthcare rules: posts never name patients, never promise outcomes, and never pitch accident victims about claims or settlements. Any draft that breaks a rule is held for a person to review before it can…
-
Ranqly Comms on its own, from $9 per technician
Crews can now buy Ranqly Comms, the team chat app built for field technicians, without marketing: $9 per technician a month for push-to-talk, offline messaging and AI help, or $15 for Comms Pro with ServiceTitan job channels and unlimited AI. Office staff are free, and new guides explain what Comms does for…
-
Friendlier trial reminders
New Ranqly trials get a few days to settle in before any setup reminder email arrives.
-
Job close-out notes written for you
When a technician closes a job, Ranqly writes the close-out summary from the team's messages and puts it on the job record, so the office and the next technician see what was found, done and recommended.
-
Start your free trial with Google or just your email
Start a Ranqly trial in one tap with your Google account, or with only your email address and a link that opens your dashboard, no password needed.
-
Release #2383: Comms AI pricebook pricing answers
Releases 2382: Comms AI answers pricing questions from the ServiceTitan pricebook (read-only, cached per tenant), with warranty reminder and office disclaimer on every pricing answer; no gap alert for pricing questions.
-
Release #2378: trial_started conversion for ranqly.ai's ChatGPT ads
2377: ranqly.ai reports its own trial started conversion to OpenAI Ads (data source 8TFsJfa4A6Nfo8rTopzfm7): the browser pixel under marketing consent and a server-side Conversions API copy from POST /auth/signup, both with id trial <tenantId . New env RANQLY OPENAI PIXEL ID and secret prod-ranqly-openai-ads-api-key…
-
Release #2376: Facebook image fix + Social-plan GTM pages and AI Overviews signals
Shipped: feat(marketing): Social-plan GTM pages and AI Overviews signals for ranqly.ai; fix(facebook): post the image, not the YouTube link; surface text-only fallbacks.
-
Release #2372: Healthy Home Report — offline-capable technician form
2371: adds a second PIN-gated technician page at /healthy-home-report/ beside /field-survey/ , under the same field survey enabled flag, PIN and recipients. Page 1 carries the required static-pressure box (return / before coil / after coil, TESP, initials) and the required borescope box (6 locations, photo-taken or…
-
Release #2368: Alerts when a Google review is edited after you replied
Shipped: fix(reviews): address Copilot review on edited-review detection; Cover SaaS evidence prompt and profile claim regressions; Remove unsupported SaaS proof and constrain case study prompts; feat(reviews): detect Google reviews edited after the owner replied.
-
Release #2367: CI failure jobs can open tracking issues
2366: the staging/production failure notices and the performance gate get issues: write , and create any missing label before opening their tracking issue. Previously the step failed with "Resource not accessible by integration (repository.labels)".
-
Release #2365: GBP posts target specific searches
2364: GBP post topics skip one-word category searches ("hvac", "ac") while specific ones exist ("furnace repair", "ac repair leander"), so posts stop defaulting to generic tune-ups. Each GBP post logs the search it targeted.
-
Release #2361: GBP posts name the searched city (with CI fixes)
Release of 2360. It also deploys 2355, 2356 and 2358, which are on main, but the production runs for 2357 and 2359 failed before deploying.
-
Release #2359: CI Postgres from mirror (ships #2357)
Release of 2358. It also deploys 2355 and 2356, which reached main in 2357, but that production run failed before deploying because Docker Hub rate-limited the test containers.
-
Release #2357: GBP posts name the searched city
Production release to ranqly.ai.
-
Release #2354: Deploy notifications through Gmail
CI deploy notifications (staging failure, production failure, performance regression) send through Gmail with the app's account. SendGrid is a fallback only, and its credits are exhausted. An undeliverable notification is a warning, not a failed job. Preflight warns when neither a complete Gmail login nor a SendGrid…
-
Release #2352: GBP posts target top Google searches
Weekly sync of Google Business Profile search terms (Performance API, last 3 complete months per location) into gbp search keywords (migration 049). GBP posts lead with a top non-branded search for the post's location. They fall back to the seasonal service when there's no data. scripts/gbp-search-terms.js reviews…
-
Faster, lower-cost AI assistant in Comms
Ranqly's Comms assistant now uses a quick first check before speaking up on its own, so it joins conversations only when it can help and runs at lower cost.
-
FAQ review emails and smoother admin links in Comms
Ranqly now emails reviewers when it finds new customer questions to answer on a website, and Comms admins can open any job link straight into the right chat.
-
Instagram Reels from job photos
Ranqly can now turn a business's job photos into short vertical Instagram Reels with a voiceover and on-screen captions placed clear of Instagram's buttons.
-
Every service city named on customer websites
Customer websites now name every city a business serves, label each ZIP page with its city, and pick up service areas added in Ranqly automatically.
-
Smarter team-channel AI in Comms
Ranqly's AI assistant in Comms now stays out of conversations addressed to a teammate and out of office and billing discussions, unless someone asks it directly.
-
Website FAQs from real customer questions
Ranqly now drafts website FAQ answers from the questions a business's own customers ask, checks them against the business's confirmed facts, and publishes only the ones the owner approves.
-
Clearer privacy disclosures for Google connections
The ranqly.ai privacy policy now explains exactly how Google Business Profile and Google Ads connections are used, and completed-job reporting to Google Ads is more reliable.
-
Completed jobs reported to Google Ads
Ranqly can now report each completed job and its revenue back to a business's Google Ads account, so ads favor the clicks that turn into paying work.
-
Accurate FAQs and privacy pages on customer websites
Customer websites now answer common questions using only facts each business has confirmed, include a privacy policy page, and track how often Gemini recommends them.
-
Clearer product update notes
The recent updates list on ranqly.ai now describes each release in plain language.
-
Google Business Profile photo posts that publish reliably
Photos too small for Google are now enlarged automatically before posting, and reconnecting a Google account only turns on your own business's profile.
-
Posts that stick to your facts, plus owner guides
Drafts that mention a price, statistic or customer story not in your business profile now wait for your review instead of publishing on their own, on every channel. New practical guides for owners are at ranqly.ai/guides.
-
Backup posts limited to local businesses
When a scheduled post is missing, the automatic backup post now runs only for businesses that serve a local area, so companies that serve customers nationwide never get a local-style backup post.
-
Find any job chat and tap links in Team Comms
Owners can search every company chat by customer or ServiceTitan job number, answer field questions from the owner view, and open links in any message.
-
Ask technicians questions from your other tools
Connected apps can post a tap-to-answer question in a job chat, collect the answers, and log each one to the ServiceTitan job. A private weekly journal thread per technician is available too.
-
Searchable team chats and repeat-visit recaps
Technicians can search chats by customer, job number or message, and a returning customer's job chat opens with a recap of past visits. The approval page now shows exactly what each social channel will post.
-
Release #2262: PNG-only libraries generate; cron logs zero-post reasons
2261 fix(generate): the per-area media gate accepts any live image or a YouTube video (a JPG stays required only for geo-tagged Google posts, which degrade to text). runGenerateIfDue logs the first per-area error on a zero-post run. Behavioral tests for both.
-
Release #2260: house tenant back in marketing generate/publish/auto-schedule
2259 fix(crons): the house tenant (Ranqly AI) is internal for mail/reporting but markets — listEligibleTenants ({ includeHouseTenant: true }) used by exactly the generate, publish and auto-schedule jobs. Fixes the tenant's silence since 2026-08-08 ( 3c216128 moved the auto-schedule sweep to the eligible list).
-
Release #2258: customer spotlight topic + AI Overviews readiness for tenant sites
2256 feat(house): customer spotlight focus topic on the marketing saas pack — a post that must feature the featured customer due (name, trade, city; Ranqly in passing), carried to GBP/Facebook spokes; degrades to case studies when nobody is featured or the customer's profile lacks a trade/city. 2257 feat(website): AI…
-
Release #2239: featured tenants, house-tenant customer mentions, venue-linked media
2235 feat(admin): tenants.featured pin — a featured tenant is always in the admin company selector (fixes the missing "Ranqly AI" entry) and pins to the top of Admin → Companies. New migration migrate-tenant-featured (Postgres + SQLite). 2238 (re-open of 2237) feat(house): Ranqly's own marketing agent may name…
-
Release #2230: homepage sign-in hotfix + header click-to-call on tenant sites
2229 fix(login): homepage sign-in broken by a SyntaxError in the app script. Since the 2026-09-22 release the homepage login-form handler never attached (dangling ternary branch from bd81f4ce), so the form did a native GET and reloaded. One-line fix plus a test that parses every inline script in index.html . 2226…
-
RNQLY Credits rules are now written into our Terms of Service
The rules for RNQLY Credits now live in section 8 of the Terms of Service, not just in an FAQ: they are a loyalty benefit with no cash value, they cannot be transferred, and when a subscription ends all credits, vested and unvested, are forfeited at the end of the paid period.
-
Delete a published post right from your Posts page
You can now take a published post down from the Posts page, not just the Published view, and Ranqly tells you plainly what happened on each channel, including that Instagram does not let apps delete posts, so you know to remove it there yourself.
-
Connecting several social accounts in one sitting just works
Connecting Facebook, Instagram, Google and LinkedIn back to back no longer hits a limit partway through, and if something does go wrong the message now says what happened instead of pointing at your settings.
-
Food trucks and food parks can sign up as themselves
Food trucks and food parks can now choose their own category at signup, keep it through setup, and answer setup questions written for them — so their very first posts are about food, not about service calls.
-
Venue screen networks: posts that spotlight your partner venues
A new category for businesses that run advertising screens inside local venues. Keep a list of your partner venues and Ranqly writes posts that spotlight them by name, in rotation, without ever inventing a venue, a venue count, or an audience figure.
-
Release #2172: failed-post visibility, content variety, $49 Social launch + prod env
Shipped: feat(marketing): add the founder's approved quote to the Social launch (#2170); fix(marketing): the previous release's metadata leaked into this one; feat(marketing): advertise the $49 Social plan, and announce it; test(deploy): guard the app tier's env vars, not just its secrets; fix(posts): an unverifiable…
-
Release #2163: oversized media fix, Meta app-review page, $49 social tier
Shipped: fix(billing): close the social-tier leaks I said I had closed; fix(marketing): scope the disconnect promise to what the product actually does; fix(media): apply the 32 MiB cap to RANGE responses too, and test at runtime; feat(billing): $49 social tier for post-only customers; fix(media): serve files over 32…
-
Release #2152: media upload failures classified + bounded outbox retries
Shipped: fix(comms): make the retry cap durable, and tell the page what the worker dropped; fix(comms): surface the 4xx drop, and tell the page when a flush only discards; fix(comms): apply the outbox policy in the service worker too, and stop dropping silently; fix(comms): stop a failed media upload retrying…
-
Release #2139: @ai photo fix + automatic ServiceTitan media sync
Job-site photos and video posted by field technicians now reach the matching ServiceTitan job automatically, instead of waiting for someone to send each one by hand. The in-chat AI assistant also answers again in channels where photos have been shared.
-
Release #2134: give the Node tier SUPERVISOR_INGEST_TOKEN (unblocks auto-publish)
Releases 2133. One line, and it is the change that actually makes auto-publish work.
-
Release #2130: food-park auto-publish allowlist, photo preview and swap on pending posts
Releases 2128 and 2129. Both came out of the food park's report that its 9/10 drafts sat badged "queued for auto-publish" and never went out.
-
Release #2111: Anthropic prompt caching, billing digest in SRE inventory
Release: Anthropic prompt caching, billing digest in SRE inventory
-
Release #2109: perf job token permission for the staging-deploy wait
Release: perf job token permission for the staging-deploy wait
-
Release #2107: remaining agent role checks, prod perf test waits for staging deploy
Release: remaining agent role checks, prod perf test waits for staging deploy
-
Release #2104: agent principal sees all tenants
Release: agent principal sees all tenants
-
Release #2096: agent browser login, media_tagging capability
Release: agent browser login, media tagging capability
-
Release #2094: agent delegated-admin foundation, food park media categories
Release: agent delegated-admin foundation, food park media categories
-
Release #2091: billing reminder follow-ups
Shipped: fix(billing): message extraction in the per-tenant catch cannot throw; fix(billing): tolerate non-Error throws in the per-tenant send catch; fix(billing): review follow-ups — string is_active, per-tenant error rows in bulk send.
-
Release #2085: billing reminder approval list
Shipped: fix(billing): approval page selection follows sendable state; no preview for paying tenants; fix(billing): parse waive_onboarding like the preview route; keep addresses out of logs; fix(billing): reject non-base64url signatures before the constant-time compare; fix(billing): bounded-concurrency sends, reuse…
-
Release #2084: model per source, Anthropic routing, durable generation quality
Release: model per source, Anthropic routing, durable generation quality
-
No draft pile-ups
When posts are waiting for your review, Ranqly pauses new drafts and reminds you once a day — approve, edit, or clear them in one click, and fresh drafts resume the next day.
-
Food parks and their trucks post as one place
Link a food park to the trucks that serve in it, and every post names real trucks, real cuisines, and the park's real address, so search engines and AI assistants learn them as one destination.
-
Your numbers, stated exactly
Tell Ranqly your real capacity — how many trucks, spots, or seats — and every post says "up to that number", never more; anything unverified is caught before it publishes.
-
Compare Ranqly with Podium, Birdeye, Housecall Pro, and agencies
New plain-language comparison pages and a buyer's guide to HVAC marketing software, so contractors and AI assistants can see exactly where Ranqly fits.
-
Chat leads count in your ad reporting
Leads that come in through the website chat now register as conversions in OpenAI Ads, and every lead carries privacy-safe matching data so ad attribution works even without cookies.
-
See how AI assistants describe your business
Ranqly now checks weekly whether ChatGPT and Gemini mention your business for local searches, and flags immediately if ranking data ever stops flowing, so your visibility history stays trustworthy.
-
Resized photos publish reliably
Photos that Ranqly resizes or reframes for Instagram and TikTok are now stored where they can be served, so those posts publish instead of failing to load.
-
Photos fit Instagram automatically
Images that are too tall or too wide for Instagram are now framed to fit before posting, so your photos publish without being rejected or cropped.
-
Posts with library images publish reliably
Photos pulled from your media library now reach Instagram, TikTok and Google Business Profile correctly, so scheduled posts stop failing partway through.
-
Google Business Profile locations connect reliably
Connecting a Google Business Profile now brings in every location on the account, so posts and review tracking attach to the right listing instead of stalling at setup.
-
Print-verified direct mail
Ranqly's permit-triggered postcards are proofed against real print output, so every mailed piece lands with a scannable QR code and correct contact details.
-
Know which mailbox produced the call
Direct mail now carries a code unique to each household, so a campaign can report which addresses responded rather than only how many pieces went out.
-
Know which ads actually produce customers
Leads now carry the campaign that produced them, and conversions report back to the ad platform from the server as well as the browser, so spend can be judged on customers rather than clicks.
-
Billing moves to Ranqly AI LLC
Subscription billing now runs through the Ranqly AI LLC account, with sales tax handled automatically at checkout once registration is complete.
-
Only claim what you actually offer
Businesses now tick the amenities they genuinely have — live music, dog friendly, catering, dietary options — and the AI mentions only those, so a post never promises something a customer will not find when they turn up.
-
Content that fits the tenant
Posts now match the business they are written for — a nationwide software company no longer gets copy promising to visit the reader's neighbourhood, and each industry is described in the words its own buyers use rather than in generic sales language.
-
Campaign tagging on mailed pieces
Every postcard now carries the campaign that paid for it on the mail provider's own record, so a print-and-postage invoice or a delivery report can be read per campaign instead of reconciled by hand.
-
Per-campaign tracking numbers
A mail campaign can now carry its own phone number, so the calls it produces are counted against that drop rather than pooled with every other one — which is what makes a small test drop readable before a larger one is paid for.
-
ZIP campaigns
A direct-mail drop can now be paired with the local content a recipient finds when they look the company up — the mailed ZIP is favoured in the marketing agent's rotation, capped at a human cadence, so the profile looks active and relevant at exactly the moment someone decides whether to call.
-
Structured-data accuracy pass
Ranqly's own site now declares only capabilities it actually has and keeps internal operations views out of search results, and direct-mail postcards render the contractor's state licence number exactly once however it is stored.
-
Personalised permit-lead direct mail
Ranqly can now print and mail a postcard to every home whose permit record shows aging HVAC, with that household's own install year printed on the card — targeting no purchased mailing list can reproduce, sent without leaving the platform.
-
Mail-ready lead export
The replacement-opportunity export now produces a complete mailing list — proper name, street, city, state and ZIP — so a comfort advisor can hand it straight to a print vendor or a direct-mail platform instead of rebuilding addresses by hand.
-
ServiceTitan customer creation
Leads and permit-lead mail batches now create their ServiceTitan customer in a single write, with the service location and campaign tag attached — so a comfort advisor's mailing list and the CRM stay in step without anyone re-keying an address.
-
Release #1931: ServiceTitan customer creation fix
Leads and permit-lead mail batches now create their ServiceTitan customer in a single write, with the service location and campaign tag attached — so a comfort advisor's mailing list and the CRM stay in step without anyone re-keying an address.
-
Release #1929: ServiceTitan hand-off for permit-lead mail
A comfort advisor mails 10 permit-lead homes a day, and those 10 now appear in ServiceTitan as tagged customers the moment they go out — so the CRM records real outreach instead of absorbing a 15,000-row prospect dump it cannot bulk-delete. Owner names arrive from the county appraisal roll surname-first and all-caps, with co-owners and trustees appended; they are rewritten into how a person is actually addressed before anything is printed.
-
Release #1927: permit-lead mail attribution + LOB_API_KEY manifest pin
Shipped: feat(sales): campaign attribution for permit-lead mail (#1926); fix(deploy): pin LOB_API_KEY in the manifest; explain a zero verify result.
-
Release #1924: 10-at-a-time paging with page-scoped verification
200 strong leads in a ZIP isn't a day's work for a comfort advisor — 10 is. The card now pages at 10 and verification is scoped to the page in front of you, so cost tracks usage: 10/day ≈ 300 lookups/month, exactly the free tier.
-
Release #1922: controlled, cost-guarded address verification
Closes a live cost risk and makes verification an explicit, scoped action.
-
Release #1920: address verification cast fix and USPS vacancy signal
Adding a real LOB API KEY exposed a bug that had been dormant behind the no-key guard.
-
Release #1918: customer-match audience hashing script
Adds scripts/hash-audience.js — turns a customer export into a SHA-256 audience file for OpenAI Ads, Google Customer Match, or Meta.
-
Release #1916: strong-opportunity markers and honest sync notice
Two UI fixes on the Replacement opportunities card.
-
Release #1914: permit sync watermark, suppression, Start outreach, UI fixes
Five defects found by putting the feature in front of a real user. The sync itself worked — 14,995 opportunities, 9,579 owner-enriched — these are the things around it.
-
Release #1912: fix permit-opportunities auth (all routes were 401ing)
Fixes a live defect: every route on /permit-opportunities has been returning 401 since it shipped.
-
Release #1910: TCAD join for replacement opportunities
Wires the imported tcad properties data into the Replacement opportunities card. It was loaded last release but nothing read it.
-
Release #1908: permit address verification, ZIP routing, TCAD enrichment
Ships the enrichment and routing layer for Replacement opportunities, plus the tcad properties table that a pending Cloud SQL import needs to land in.
-
Release #1906: Sync now for replacement opportunities
Adds the manual sync trigger, which is what currently blocks enabling the feature for a tenant — the monthly cron was the only path to populate the table, so turning it on meant waiting until the 1st.
-
Release #1904: permit sync truncation fix
Follow-up to 1902. Fixes a truncation bug found while preparing to enable the feature for tenant 2 with their real 44-ZIP footprint.
-
Release #1902: permit-record replacement opportunities (tenant side)
Production release of the Replacement opportunities feature. develop is 5 commits ahead of main .
-
Release #1898: Ranqly AI LLC entity disclosure, Organization schema, founder photo
Production release of the Google for Startups Cloud unblock. develop is 4 commits ahead of main , all scoped to the marketing site.
-
Release #1893: stop generating unpublishable posts + canonical host/protocol
Marketing content is no longer generated for accounts that have nowhere to publish it: the daily auto-schedule fallback now skips internal and test tenants along with any account that has no connected profile, and claims each day exactly once so a scaled-out deploy cannot produce duplicate posts. An approval queue whose posts all sit below the quality threshold can now release its best pending post instead of going silent indefinitely. Site-wide, every page resolves to a single canonical host and protocol.
-
Release #1877: Pulse day-scoped ServiceTitan reporting
Pulse can now answer "How much revenue did we make today / this week?" and "How many jobs did we complete?" from a company-wide, timezone-aware ServiceTitan sweep (the st_period metrics block: today plus the trailing 7 days), alongside the existing linked-job sample. Bounded pagination with truncation flagging.
-
Release #1875: Business Pulse entry-point render fix
1874 — fix(comms): render the Business Pulse entry point. The backend for Business Pulse (per-tenant flag, /pulse/open find-or-create, private per-admin membership) worked, but the comms frontend never rendered the entry element — enabling the feature had no visible effect for any tenant. The channel list now shows…
-
Release #1872: vertical-agnostic blog pipeline + latency advisory
1869 — Vertical-agnostic blog autopilot. Blog topic selection, composer prompts, quality-gate citation rules, and several agent/reviewer fallbacks now resolve from the tenant's category pack instead of assuming HVAC. HVAC tenants keep byte-identical service/angle catalogues; non-trades tenants (edtech, restaurant, …)…
-
Release #1863: Business Pulse + p99 advisory
Promotes develop to main: Ranqly Pulse (admin-only private analytics assistant, per-tenant flag, default off) and the p99-advisory gate calibration. Self-reviewed.
-
Release #1860: staging perf mutex
Promotes develop to main: cross-pipeline concurrency mutex on the staging-ingress perf window — closes the k6 50%-404 collision class. Self-reviewed.
-
Release #1858: digest degraded fixes
Promotes develop to main: 10s pool connect timeout (shared-core stall headroom), signup-probe posts excluded from the publish pipeline, probe tenants excluded from auto-publish and rank-tracking health checks. Self-reviewed.
-
Release #1838: mention picker + replies
Promotes develop to main: @-mention picker (AI + teammates with non-member warning), tolerant @ai detection, reply/quote with AI context threading. Self-reviewed.
-
Release #1834: trusted-domain manual fetch
Promotes develop to main: @ai fetches manufacturer-manual PDFs from allowlisted domains (16 platform defaults + per-tenant additions in Comms settings), with SSRF-guarded fetching and PDF magic-byte validation. Self-reviewed.
-
Release #1832: ai doc context + whisper guards
Promotes develop to main: @ai reads PDF attachments shared in the channel (cited by filename; honest fallback when the provider can't take documents) and voice transcription no longer captions silent clips with Whisper hallucinations. Self-reviewed.
-
Release #1829: about founder linkedin
Promotes develop to main: founder LinkedIn byline + Person structured data on /about (Google for Startups application prerequisite). Self-reviewed.
-
Release #1816: probe-tenant metrics fix + reaper armed on app tier
Ships PR 1721 (sole change since last release):
-
Release #1793: probe cleanup + comms 429 fixes
Promotes develop to main: signup-probe reaper armed + eligibility guard (ends the daily cron db unavailable alerts and 98% waste in marketing LLM spend), comms per-user limiter fixes (stream exempt, 480 cap, client backoff hardening), digest long-tail rollup. Self-reviewed.
-
Release #1746: comms device continuity
Promotes develop to main: phone-only re-auth after session expiry (remembered invite token) and the 📱 sign-in-on-another-device handoff. Self-reviewed (Copilot out of credits).
-
Release #1717: fix extensionless audit URLs (campaign blocker)
One-line fix: express.static now resolves /audit/<slug to <slug .html. Without this every link in the re-engage campaign 404s. Verified /audit/zip-air-waco.html serves 200 in prod; this makes the clean URL work too.
-
Release #1716: AI-visibility audit pages for re-engage campaign
Publishes 191 static personalized audit pages under /audit/<slug — the landing payload for the Smartlead re-engage campaign (191 past leads, 94% measured AI-dark by 297 live ChatGPT probes on 2026-07-24). No app code changes; served by existing static middleware. Merging makes the campaign's baked-in links resolve.
-
Release #1710: uploads range support
Promotes develop to main: HTTP Range (206) support on /uploads — fixes voice-clip playback errors on iOS and wrong durations on desktop.
-
Release #1687: SRE dedup fix, orphan job registration, startup stagger
Releases the three fixes from the 2026-07-19 pool-saturation incident review:
-
Release #1671: last_login migration fix
Promotes develop to main: users.last_login migration is now adapter-aware and runs on the Postgres boot path — root fix for the staging login 500s behind the k6 failure rate. Staging was already patched live.
-
Release #1668: housekeeping
Promotes develop to main: recalibrated k6 perf gate (staging-noise-aware thresholds + live p99 check), SendGrid removed from deploy manifests (Gmail SMTP is the provider), SQLite migration noise fixes, and local-schema cleanup. Cloud SQL max connections=100 and live SendGrid removal were applied directly and verified.
-
Release #1663: daily business pulse digest
Promotes develop to main: end-of-day platform-admin pulse email (posts per tenant, Comms top tenants/people, leads, signups) at 9 PM Central, plus the an index on chat_messages.created_at.
-
Release #1661: team adds born verified + list fix
Promotes develop to main: admin-added teammates are born verified with a welcome email (fixes the unloginable-teammate loop), and the Users list/bulk dedupe ignore removed (deactivated) accounts — Remove now visibly removes.
-
Release #1647: admin removal guard
Follow-up to 1646: DELETE /tenants/:id/users/:userId refuses role='admin' targets — closes the privilege-escalation Copilot flagged (company admin deactivating a platform admin that shares their tenant id).
-
Release #1646: multi-tenant accounts + user removal
Promotes develop to main: single-login multi-tenant support (company picker at login, in-header tenant switcher, clean degradation when access to one tenant is lost) and user removal in the Users card — unblocks Bryan and cleans up duplicate signups.
-
Release #1641: oversight probe fix
Follow-up to 1640: role/token validation runs before the per-tenant oversight flag check, so non-admin users can't probe whether owner view is enabled.
-
Release #1640: opt-in owner view
Promotes develop to main: Comms owner view (company-chat oversight) is now off by default for every tenant, enabled per tenant by the platform admin from the Companies row menu. All oversight endpoints and the owner-view ST-sync fallback enforce the flag server-side.
-
Release #1617: category AI personas
Promotes develop to main: platform-admin default @ai personas per tenant category (admin UI card + /admin/comms-personas), tenant persona still overrides; comms settings shows the inherited default.
-
Release #1615: comms persona, announcements, bulk import
Promotes develop to main: per-tenant AI persona for @ai, announcement/broadcast channels (office-posted, everyone auto-joins, read-only for techs), and CSV bulk member import — the non-profit onboarding feature set.
-
Release #1611: non-profit tenant category
Promotes develop to main: non-profit tenant classification (admin pill + toggle, POST /admin/tenants/:id/category, CHECK-constrained tenants.category column) and Comms join copy that no longer assumes ServiceTitan — ahead of the incoming non-profit Comms customer.
-
Release #1569: comms documents + owner-view ST sync
Comms gains document sharing — techs and office can attach PDFs, Word/Excel files, and CSVs in job channels, with filenames carried through to ServiceTitan — and owners can push any message to ServiceTitan straight from the read-only owner view.
-
Release #1565: comms summary entity fix
Follow up to 1561 addressing Copilot review: HTML entities in ST job summaries decode before tag stripping (entity escaped markup can no longer resurface as literal tags), and the media signing bucket test is time frozen for determinism.
-
Release #1561: restore comms media (signed URLs)
Hotfix release: signs comms media url on every API response so photos/voice/video render again under the fail closed /uploads gate from 1540. No stored data changed — all existing media reappears on deploy. Also strips raw HTML from ST job summaries in channel system messages.
-
Release #1540: security hardening + prod webhook secret pins
Security hardening: locked-down registration, Bearer/JSON OAuth start flow, fail-closed ServiceTitan and leads-ingest webhooks, signed upload URLs, and webhook secrets pinned in the production deploy manifest.
-
Release #1527: release
Comms: walkie talkie reliability (tap to resume for blocked audio, poll driven catch up, screen wake lock), Company/Archived entries admin only, admin deep links open via owner view; OHA llms.txt additions
-
Release #1523: release
Comms: archive/restore groups; app name shows as Ranqly Comms on phones
-
Release #1521: release
Comms: walkie talkie mode, channel sections w/ jobs by appointment day, group rename, PIN gated owner oversight (Company chats)
-
Release #1520: release
Comms: walkie talkie mode (auto play incoming voice, offline catch up), channel list sections with jobs grouped by appointment day, group rename
-
Release #1507: release
Fix duplicate social post generation when Cloud Run scales out (once per day claim; 2026 07 08 incident: 6 duplicate review digests) Storage cleanup moved to wall clock daily cron (stops false SRE staleness alerts)
-
Release #1489: release
Send to ServiceTitan: media attachments now post to the correct Forms API endpoint (was 404ing); permission specific error messages
-
Release #1486: release
Send to ServiceTitan: size rejections now surface a clear 'file too large' message; ST error details logged for diagnosis
-
Release #1478: release
Inbound integrations webhook: external tools (FieldOps) can deliver post job findings into the job's comms channel by ServiceTitan job id (per tenant token in Settings)
-
Release #1469: release
Comms app now detects deploys and shows a one tap Refresh banner in open tabs (on reconnect, foreground, and every 10 min)
-
Release #1467: release
AI copilot team coaching in group channels (per group on/off switch for admins; 15 min cooldown; DMs stay @ai only)
-
Release #1463: release
AI copilot wiring answers now include a rendered schematic image (pinch zoomable PNG) alongside the text map; diagrams attach to ServiceTitan jobs via the existing push to ST flow
-
Release #1461: release
Comms AI copilot upgraded to Claude Opus 4.8 with adaptive thinking — expert level, measurement led troubleshooting for senior techs; automatic OpenAI fallback; unified usage/budget logging
-
Release #1459: release
AI copilot: wiring diagrams & tables now answered inline (no more refusals); direct asks get up to 300 words / 700 tokens AI copilot: knowledge gap self reporting — unanswerable questions notify admins automatically (no more copy pasting chats)
-
Ranqly Comms — playbook citations and team adoption insights
The Comms AI now cites coaching sources by name and company (per the 10 Commandments from One Hour), and admins get a team-activity view showing who is actively using Comms versus who needs a nudge — installed, quiet, or active at a glance.
-
Ranqly Comms AI — live job answers, playbook coaching, privacy guardrails
The Ranqly Comms AI assistant now answers technicians' job questions from live ServiceTitan data (status, invoices, estimates), coaches crews from the company's own uploaded playbooks citing documents by name, and enforces privacy guardrails — politely refusing requests for customer information beyond the job's needs a
-
Ranqly Comms — the AI now hears voice messages and watches the money
Ranqly Comms' AI assistant now transcribes walkie-talkie voice messages so it can help with what technicians actually said, answers every direct @ai question, and watches completed jobs — flagging missing invoices and nudging technicians to follow up on open estimates. Group chats gained member removal, and technician
-
Ranqly Comms — smarter job channels and group management
Ranqly Comms channels now follow the dispatch board more intelligently: job channels sort by appointment time, finished jobs clear out of the list automatically, admins choose which office staff join job channels, and existing group chats can add teammates any time.
-
Release #1420: vapid manifest
Pins the comms VAPID push secrets in the production set secrets manifest (+ APP REQUIRED SECRETS) so deploys stop stripping them. Secrets already created and attached to the live service.
-
Release #1413: comms (test fix)
Re runs the comms production release. Unblocks the unit test gate: website tenant chatbot test updated for the schedulerScript embed (eabc1cf) that sits between chatbotScript and </body .
-
Ranqly Comms — team communication for trades crews
Launches Ranqly Comms at /comms: an installable team chat app for field crews with walkie-talkie push-to-talk voice, offline messaging that survives dead zones, ServiceTitan-linked job channels with per-customer history, an AI assistant that helps technicians troubleshoot on site, and passwordless invite-link onboardin
-
Release #1306: Starter removal from marketing, founding customer onboarding waiver
Promotes two develop commits to production: public marketing now shows Pro/Growth only (Starter removed from pricing, FAQ, and related pages), and a founding customer offer waives onboarding for the first 50 signups who agree to a testimonial or case study—with signup checkbox, /public/founding offer API, and admin not
-
Release #1305: newsroom index, footer links, homepage trust bar
Ships the marketing newsroom hub at /newsroom, Newsroom links in public footers, and a homepage trust bar with the NVIDIA Inception badge and One Hour case study link. Staging deploy for develop passed before merge.
-
Release #1289: trust-mode emails, signup pricing, ST ROI phone calls
Ships develop to production: trust mode marketing generate digests and FB/IG GBP preview links ( 1287), ServiceTitan inbound call counts on the ROI dashboard ( 1288), signup Pro/Growth pricing with /signup redirect and the plain language One Hour case study ( 1285), plus k6 login assertion fix and warm GTM docs.
-
Release #1282: develop → main (SEO thin-content fixes, blog autopilot, image optimization)
29 commits since the last release. Headline changes:
-
Release #1271: develop → main (NVIDIA press, ops-copilot SMTP, security fixes)
Promotes develop to main since release 1240.
-
Release #1240: develop → main (Plan A additive hub, trade-aware FAQs, baseline)
Promotes the Plan A batch + carry forward to main.
-
Release #1235: develop → main (AEO quick wins, admin UX, a11y)
Promotes the latest develop work to main.
-
Release #1227: develop → main (per-tenant Hearth financing)
Promotes the per tenant Hearth financing feature ( 1226) to main.
-
Release #1224: develop → main (Hearth financing + per-tenant gbp_place_id)
Shipped: review: address Copilot feedback on PR #1223; feat(website): wire Places review snippets into per-tenant reviewSummary; chore(scripts): add GBP review-ingest diagnostic (+ location discover/sync); feat(website): per-tenant gbp_place_id -> live Google rating/count via Places API; feat(website): add Hearth 0%...
-
Release #1168: sharper local signals on auto-posts
Auto-posts can now carry each business's city and state, strengthening the local entity signals that help AI search engines recognize and cite your business.
-
Release #1166: mobile homepage sign-in layout
Ships the mobile homepage fix so sign in appears under the hero (above the case study card) on narrow screens, avoiding portrait scroll/landscape only login. Single UI change in app/public/index.html.
-
Release #1157: deployment reliability improvements
Behind-the-scenes infrastructure and deployment hardening to keep Ranqly fast and reliable. No changes to your published content.
-
Release #1151: GEO entity signature + dynamic GEO research
Ships PR 1150: GEO entity signature and dynamic GEO research. Staging deploy on develop succeeded after merge.
-
Release #1141: Ranqly brand GEO (llms.txt, /features, auto-bump)
Production release of marketing site GEO from develop ( 1140): curated llms.txt for generative engines, /features page with quotable product copy and schema, expanded robots Allow for AI crawlers, sitemap entries for /features and /leakage audit, and an automated workflow that bumps marketing GEO on develop→main releas
-
Customer lead acknowledgment
Templated "we got your request" SMS via send.dm when AI auto-outreach is off — feature-flagged for safe rollout.
-
Technician notifications (sent.dm)
Multi-channel template notifications for job dispatch and schedule changes; per-tenant opt-in.
-
Market leakage audit
Estimates trade market size by ZIP and share vs competitors using Census and Places data. Public tool at ranqly.ai/leakage-audit.
Frequently asked
What is Ranqly?
Ranqly is software for local contractors who need consistent marketing execution: content, GBP, websites, and measurement — without hiring a full agency team.
Who is Ranqly for?
HVAC, plumbing, electrical, and other home-service businesses that serve customers in defined ZIP codes and want sustainable local visibility.
Does Ranqly help with ChatGPT visibility?
Yes. Published customer sites include GEO-structured content and llms.txt. Ranqly can also run AI visibility probes to measure whether generative engines mention your brand.
See plans and onboarding details on the pricing page, or review product videos first.
View pricing Watch videos