Inspiration

As a freelancer working with clients in Dubai, the US, and the UK, I kept running into the same frustrating problem: payments would come through platforms like Wise or Payoneer with unpredictable fees and delays, and I'd lose track of who owed me what. Small shortfalls, like receiving $265 instead of an invoiced $300, often went unnoticed, and I'd forget to follow up on late payments until it was too late. I wanted to build something that would catch these issues automatically instead of relying on my own memory.

What it does

Freelance Admin Agent reads invoice and payment emails, automatically classifying them and extracting key details such as client name, amount, currency, invoice number, and dates. It matches payments against invoices, calculates whether a payment arrived on time and in full, and flags anything that's late or short. When action is needed, it drafts a professional, context aware follow up message for the user to review, edit, or approve, and nothing gets sent automatically. Everything is shown on a clean dashboard with color coded statuses.

How we built it

The core reasoning is built with the Strands Agents SDK, using Claude Sonnet 4.5 via AWS Bedrock. One agent handles document classification and structured data extraction using a Pydantic model for reliable output. A second agent drafts context appropriate follow up messages based on payment status. Records are stored in SQLite, and the whole thing is wrapped in a Streamlit dashboard for pasting emails and reviewing or approving drafted follow ups.

Challenges we ran into

This was my first time using the Strands Agents SDK, so I had to verify current syntax against the official docs rather than guessing. Setting up AWS IAM permissions and Bedrock model access took longer than expected, since a misconfigured permissions policy initially blocked all model calls. I also hit a subtle database bug where reprocessing the same email twice would duplicate records and inflate totals, which I caught and fixed by making record insertion check for duplicates before writing.

Accomplishments that we're proud of

Getting the agent to correctly reason about a real underpayment case, extracting the actual amount received of $265 instead of the invoiced amount of $300, and generating a genuinely professional, non accusatory follow up message explaining the discrepancy, felt like proof that this agent does real judgment rather than just pattern matching. Catching and fixing the duplicate record bug through careful testing rather than assuming the code worked was also a meaningful moment.

What we learned

I learned how to build a multi step reasoning agent using Strands structured output feature, how AWS Bedrock model access and IAM permissions actually work end to end, and the importance of testing with realistic edge cases such as repeat processing rather than just the happy path.

What's next for Freelance Admin Agent

Next steps include live Gmail integration so the agent can monitor an inbox directly instead of requiring pasted text, real email sending once the approval flow is trusted, multi currency conversion tracking, and deployment with AWS AgentCore for a fully hosted, autonomous version.

Built With

Share this project:

Updates

Submission history