/
Contact details extracted per card, each scored for confidence
Manual typing needed to turn a card into a contact
Description: Card images auto-deleted after processing, no long-term retention
Civic
GovTech, constituent relationship management software for congressional and legislative offices
AWS Lambda, Amazon Textract, Amazon Bedrock (Anthropic Claude Haiku 4.5), Amazon S3, Terraform
Civic is a govtech CRM platform built for congressional and legislative offices, replacing systems that are decades old. Its mobile app already let staff capture voice notes and photograph physical documents, but there was no way to turn a business card into a contact record without typing it in by hand. Avahi built a standalone document intelligence API on AWS that accepts a photo of a card and returns a structured JSON contact record, with a confidence score attached to every field so the app can flag anything uncertain. The result gives congressional staff a way to capture a contact in the moment it is handed to them, and Civic’s engineering team received the complete source code to fold the capability into its own mobile app.
Civic builds Revere, a constituent relationship management platform purpose-built for congressional and legislative offices. It replaces decades-old legacy systems with a modern system of record for constituent communication, covering the correspondence, casework, and contacts that a congressional office handles daily. Its mobile app extends that system into the field, giving members and staff tools such as voice notes and physical document capture while they are away from the office.
Congressional and legislative offices run on in-person contact. Staff and members meet constituents, lobbyists, agency representatives, and advocacy groups constantly, and those meetings still end the way they always have, with someone handing over a business card. The card then has to become a CRM record, and the only route available was manual retyping.
That step is slow, error-prone, and easy to skip when the next meeting is already starting. A mistyped email address or a card that never leaves a jacket pocket means the connection is functionally lost, even though the meeting happened. Multiple offices using Civic’s app had specifically asked for a way to digitize a card without typing it in.
Left unaddressed, the gap undercut the premise of the platform. A system meant to be the single record of who an office knows and talks to was missing the contacts made in exactly the settings where congressional relationships are built.
Civic already ran its platform on AWS, so building the capability there kept it inside an account boundary and security posture its team had already reviewed. That mattered for a customer whose buyers sit inside the U.S. House of Representatives and who is held to their IT security expectations.
AWS also offered both halves of the extraction problem as managed services in one place: Amazon Textract for reading text off a photographed document, and Amazon Bedrock for running a foundation model that turns that raw text into structured fields. Building on serverless components meant the API could sit idle between uses and scale to a busy day at a congressional office without anyone managing capacity, which suits a tool used in irregular bursts rather than at steady volume.
Civic needed a well-defined capability built quickly by a team that could work directly in AWS without a long ramp-up. As a premier-tier AWS partner with a track record of delivering generative AI solutions on the platform, Avahi could take the requirement from discovery to a deployed endpoint inside a four-week window.
The engagement model also fit how Civic wanted to work. Civic’s own engineers own the mobile app, so they wanted a clean API contract and full ownership of the code rather than a dependency on an outside team. Avahi scoped the work to deliver exactly that: a standalone service, documented and handed over complete, that Civic’s engineers could integrate and extend themselves.
Avahi built the capability as a single serverless API on AWS Lambda, reachable over HTTPS and authenticated with an API key. The endpoint accepts a photographed card as either a multipart form upload or a base64-encoded image in a JSON body, handling JPEG and PNG files up to 10 MB, which covers what a modern phone camera produces. Civic’s app sends an image and receives a structured contact record, with no change required to the existing mobile UI.
Extraction runs in two stages, each doing what it is best at. Amazon Textract reads the card first and returns the visible text along with a confidence value for every word it recognizes. That text then goes to Anthropic’s Claude Haiku 4.5 on Amazon Bedrock, which resolves it into labelled contact fields, working out which line is a job title and which is a company, normalizing a phone number, and separating a mailing address from a website. The model is constrained to a fixed output schema, run at zero temperature for repeatability, and instructed to return an empty value rather than guess when a field is not on the card.
Confidence scoring is where the two stages come together, and it is what makes the output safe to write into a CRM. For each field the API combines the character-level confidence Textract reported for the underlying words with the model’s own assessment of how sure it is about that field, weighting the two evenly. A name printed in a clean typeface and read cleanly scores high; a hand-set logo or a smudged mobile number scores low. The API returns those scores alongside the values, so Civic’s app can accept the confident fields and surface only the doubtful ones for a human to check.
The API returns nine fields in total: full name, job title, company, email, phone, mobile, website, mailing address, and social handles, plus a verbatim transcription of everything visible on the card. Response time is kept short by running the independent work concurrently rather than in sequence: the image upload and the OCR pass start together, and the model extraction runs alongside the generation of a temporary retrieval link, so a photographed card comes back as a contact record in seconds.
Handling of the images themselves was built to match the compliance expectations of a government customer. Uploads go to an Amazon S3 bucket with all public access blocked, are reachable only through short-lived signed URLs, and are removed automatically by a lifecycle rule one day after processing, so cards do not accumulate as a long-term store of personal data. The whole stack is defined in Terraform, which let Avahi hand over infrastructure that Civic could stand up in its own AWS account from code.
Avahi demonstrated the finished API live against a physical business card during the review session with Civic’s team, alongside a browser-based interface used to exercise the endpoint, then handed over the source code, a Postman collection, and a deployment guide covering account setup, model enablement, and teardown.
Avahi validated the API live during the handoff review, scanning a physical business card and returning a complete, confidence-scored contact record in a single pass. Civic confirmed the capability would go into the Revere iOS app, where a photo taken during a meeting lands directly in a staffer’s personal contacts in the CRM. For a congressional office, that closes the gap between an in-person introduction and a tracked constituent record, and it removes the retyping step that previously stood between the two.
Because the solution was delivered as a standalone service defined in code, Civic can also redeploy it into its own AWS account and extend it beyond business cards to the other physical documents a congressional office handles.
Civic
GovTech, constituent relationship management software for congressional and legislative offices
AWS Lambda, Amazon Textract, Amazon Bedrock (Anthropic Claude Haiku 4.5), Amazon S3, Terraform
Civic is a govtech CRM platform built for congressional and legislative offices, replacing systems that are decades old. Its mobile app already let staff capture voice notes and photograph physical documents, but there was no way to turn a business card into a contact record without typing it in by hand. Avahi built a standalone document intelligence API on AWS that accepts a photo of a card and returns a structured JSON contact record, with a confidence score attached to every field so the app can flag anything uncertain. The result gives congressional staff a way to capture a contact in the moment it is handed to them, and Civic’s engineering team received the complete source code to fold the capability into its own mobile app.
Civic builds Revere, a constituent relationship management platform purpose-built for congressional and legislative offices. It replaces decades-old legacy systems with a modern system of record for constituent communication, covering the correspondence, casework, and contacts that a congressional office handles daily. Its mobile app extends that system into the field, giving members and staff tools such as voice notes and physical document capture while they are away from the office.
Congressional and legislative offices run on in-person contact. Staff and members meet constituents, lobbyists, agency representatives, and advocacy groups constantly, and those meetings still end the way they always have, with someone handing over a business card. The card then has to become a CRM record, and the only route available was manual retyping.
That step is slow, error-prone, and easy to skip when the next meeting is already starting. A mistyped email address or a card that never leaves a jacket pocket means the connection is functionally lost, even though the meeting happened. Multiple offices using Civic’s app had specifically asked for a way to digitize a card without typing it in.
Left unaddressed, the gap undercut the premise of the platform. A system meant to be the single record of who an office knows and talks to was missing the contacts made in exactly the settings where congressional relationships are built.
Civic already ran its platform on AWS, so building the capability there kept it inside an account boundary and security posture its team had already reviewed. That mattered for a customer whose buyers sit inside the U.S. House of Representatives and who is held to their IT security expectations.
AWS also offered both halves of the extraction problem as managed services in one place: Amazon Textract for reading text off a photographed document, and Amazon Bedrock for running a foundation model that turns that raw text into structured fields. Building on serverless components meant the API could sit idle between uses and scale to a busy day at a congressional office without anyone managing capacity, which suits a tool used in irregular bursts rather than at steady volume.
Civic needed a well-defined capability built quickly by a team that could work directly in AWS without a long ramp-up. As a premier-tier AWS partner with a track record of delivering generative AI solutions on the platform, Avahi could take the requirement from discovery to a deployed endpoint inside a four-week window.
The engagement model also fit how Civic wanted to work. Civic’s own engineers own the mobile app, so they wanted a clean API contract and full ownership of the code rather than a dependency on an outside team. Avahi scoped the work to deliver exactly that: a standalone service, documented and handed over complete, that Civic’s engineers could integrate and extend themselves.
Avahi built the capability as a single serverless API on AWS Lambda, reachable over HTTPS and authenticated with an API key. The endpoint accepts a photographed card as either a multipart form upload or a base64-encoded image in a JSON body, handling JPEG and PNG files up to 10 MB, which covers what a modern phone camera produces. Civic’s app sends an image and receives a structured contact record, with no change required to the existing mobile UI.
Extraction runs in two stages, each doing what it is best at. Amazon Textract reads the card first and returns the visible text along with a confidence value for every word it recognizes. That text then goes to Anthropic’s Claude Haiku 4.5 on Amazon Bedrock, which resolves it into labelled contact fields, working out which line is a job title and which is a company, normalizing a phone number, and separating a mailing address from a website. The model is constrained to a fixed output schema, run at zero temperature for repeatability, and instructed to return an empty value rather than guess when a field is not on the card.
Confidence scoring is where the two stages come together, and it is what makes the output safe to write into a CRM. For each field the API combines the character-level confidence Textract reported for the underlying words with the model’s own assessment of how sure it is about that field, weighting the two evenly. A name printed in a clean typeface and read cleanly scores high; a hand-set logo or a smudged mobile number scores low. The API returns those scores alongside the values, so Civic’s app can accept the confident fields and surface only the doubtful ones for a human to check.
The API returns nine fields in total: full name, job title, company, email, phone, mobile, website, mailing address, and social handles, plus a verbatim transcription of everything visible on the card. Response time is kept short by running the independent work concurrently rather than in sequence: the image upload and the OCR pass start together, and the model extraction runs alongside the generation of a temporary retrieval link, so a photographed card comes back as a contact record in seconds.
Handling of the images themselves was built to match the compliance expectations of a government customer. Uploads go to an Amazon S3 bucket with all public access blocked, are reachable only through short-lived signed URLs, and are removed automatically by a lifecycle rule one day after processing, so cards do not accumulate as a long-term store of personal data. The whole stack is defined in Terraform, which let Avahi hand over infrastructure that Civic could stand up in its own AWS account from code.
Avahi demonstrated the finished API live against a physical business card during the review session with Civic’s team, alongside a browser-based interface used to exercise the endpoint, then handed over the source code, a Postman collection, and a deployment guide covering account setup, model enablement, and teardown.
Avahi validated the API live during the handoff review, scanning a physical business card and returning a complete, confidence-scored contact record in a single pass. Civic confirmed the capability would go into the Revere iOS app, where a photo taken during a meeting lands directly in a staffer’s personal contacts in the CRM. For a congressional office, that closes the gap between an in-person introduction and a tracked constituent record, and it removes the retyping step that previously stood between the two.
Because the solution was delivered as a standalone service defined in code, Civic can also redeploy it into its own AWS account and extend it beyond business cards to the other physical documents a congressional office handles.
Let’s explore your high-impact AI opportunities together in a complimentary session