Sam has a Yelp problem. The Louisville business page shows a 3.3 out of 5 rating from fewer than 10 total reviews, with no new review since 2019. Google still surfaces that old score, and it gives the wrong impression of how the team actually performs for clients. The goal of this session was to design and launch an outreach campaign that asks the firm's strongest past clients to leave an honest Yelp review at the Louisville business page.
Sam set three guardrails upfront: send mechanism is Outlook through Microsoft Graph (drafts land in his mailbox at Sam@kylawoffice.com); the Yelp link is the only ask; recipients are only past clients with car-accident matters because the template opens with "On (accident date), you experienced a life-changing car accident."
Goal evolved during the session in two ways: after seeing the raw Litify universe was 5,374 past clients with email on file, we narrowed to the top 800 by recovery in the last 24 months filtered to Automobile Accident, instead of the initial 250 cap; the email body started as a short Sam-voice paragraph from me, and Sam rewrote it into a longer personal version that pulls in accident date, principal attorney, case manager, and months-to-resolve.
Queried Litify (Salesforce) via the sf CLI on the LITIFY_ORG alias. Mapped Matter schema and discovered the firm uses litify_pm__Closed_Date__c (with the 'd') not litify_pm__Close_Date__c, and recovery lives in custom field Total_Settlements_from_Insurance__c not litify_pm__Gross_Recovery__c (the latter is only populated on about 19 percent of records). litify_pm__Client__c references Account not Contact, so the join path is Matter, Account, Contact.
Found the principal attorney and case manager lookups: litify_pm__Principal_Attorney__c and litify_pm__lit_Case_Manager__c (both User references). Case type filter via litify_pm__Case_Type__r.Name = 'Automobile Accident'.
Pulled top 1,000 car-accident matters closed Settlement, Decision, or Verdict in last 24 months, sorted by Total_Settlements_from_Insurance__c DESC. Joined to Contact with Email not null and HasOptedOutOfEmail false. Deduped by email. Computed months-to-resolve as the integer-rounded difference between Open_Date and Closed_Date. Result: 800 recipients with 100 percent population on first name, attorney first name, case manager first name, accident date, and recovery. Recovery range from 6,800,000 dollars (David Hansford, 20-month case) down to 25,000 dollars (Terri Durham, 3-month case).
Verified the SAIL-Audit-Visibility app in vault.env creates drafts in Sam's mailbox via POST /users/{upn}/messages. App-only client_credentials token via MICROSOFT_GRAPH_APP_ONLY_TOKEN_ENDPOINT. Mail.ReadWrite is granted at app level. Test draft returned HTTP 201 with draft ID, cleanly deleted afterward.
Correct UPN is Sam@kylawoffice.com. The firm tenant is kylawoffice.com, not aguiarinjurylawyers.com.
Before staging drafts, created inbox protection: new mail folder "Yelp Campaign 2026-05" and new inbox rule "Yelp Campaign 2026-05 Replies" with subjectContains 'I Have A Yelp Problem' moveToFolder stopProcessingRules true. Every reply routes to the campaign folder; inbox stays clean.
Sam rewrote the body. Subject: "I Have A Yelp Problem. Will You Please Help?" Opens with client first name, references exact accident date, calls out principal attorney and case manager by first name, mentions months-to-resolve, transitions into Yelp ask with context about Google reviews vs the stale Yelp rating, includes direct review link, closes with "You'll always be a part of our family."
Grammar fix in template: when both attorney and case manager first names are present (100 percent of records), the verb is "appreciate" not "appreciates."
Staged top 100 drafts via Graph: 100 created, 0 errors. Top 5 by recovery: David Hansford (6.8M), Eric Tuyisenge (6.025M), Michael Bynum (4.535M), Giordis Milanes (2.5M), Loretta Sanders (1.1M). All 100 sit in Sam's Drafts folder ready to send.