Skip to content
Endora Commerce: our open‑source B2B e‑commerce platform, live in 4 weeks Learn more →

Endora's own CRM: LinkedIn, Gmail and website forms in one sales process

How we built a custom CRM for our own B2B sales: LinkedIn contacts, Gmail, leads from endora.pl forms via the API, and a PWA for salespeople on the road.

Endora's own CRM: LinkedIn, Gmail and website forms in one sales process
4
data sources in one place: LinkedIn, Gmail, calendar and website forms
0
website enquiries retyped by hand: the opportunity, contact and company are created automatically
75%
faster replies to enquiries: from 8 h down to 2 h
Client
Endora (internal project)
Industry
B2B e‑commerce agency: selling implementation services
Scope
Specification and development of a custom CRM: opportunities, contacts and companies, LinkedIn extension, Gmail, Google Calendar and Google Tasks integration, Min-Max offers, notifications, analytics, a public API with tokens, and a PWA

Endora sells B2B implementations: sales platforms, ERP integrations and custom systems. That kind of sale means long conversations with several people on the client's side, offers in more than one variant and decisions that take weeks. For years we handled it with several tools at once, until we decided we needed what we build for our clients: a CRM that fits our process, rather than a process bent to fit the CRM.

We built it the way we build systems for clients: from a process map, through a specification, to modules delivered step by step. We now run all our sales in it, and it doubles as a testing ground for solutions we later propose in custom CRM projects.

The screenshots come from a demo instance. The companies, people and messages are fictional. The CRM interface is in Polish.

Opportunities: the whole process on one board

The opportunity board in Endora's CRM with the stages New, Qualification, Offer and Negotiation and the value of each opportunity

Opportunities move through stages we defined ourselves: from a new enquiry, through qualification and an offer, to negotiation. A stage can have a maximum duration. When an opportunity stays put for too long, its owner gets a notification. An opportunity's value comes from its lead offer, so the column headers show how much money sits in each stage.

LinkedIn: from invitation to opportunity

The “To send today” queue with ready follow-up messages for LinkedIn contacts

An extension for Chrome, Edge and Firefox connects LinkedIn with the CRM. On a prospect's profile, the salesperson saves them to the CRM and picks a follow-up sequence. The extension recognises people who are already in the database and reports accepted invitations. Every day the CRM builds a “To send today” queue with messages from templates. The salesperson pastes them, sends them and marks them as sent. We deliberately left sending to a human: the extension never clicks “Send” on their behalf. When the conversation turns concrete, one button creates an opportunity.

Gmail: opportunities and tasks straight from an email

The CRM inbox with an email thread and the buttons Create Opportunity, Attach to Opportunity, Create Task and Create Contact

Each salesperson's Gmail syncs with the CRM every minute, and the first connection pulls in 90 days of history. Threads stay private until the salesperson links them to an opportunity or a task. Then the whole team can see them. One click on a message creates an opportunity, attaches the thread to an existing one, creates a task or adds the sender to contacts. Replies sent from the CRM go out from the salesperson's Gmail into the same thread, and a new message from the client in a linked thread notifies the owner straight away.

endora.pl forms: an integration through the API

An opportunity created automatically from the endora.pl contact form, with a section holding the form contents, the source and the owner

This shows how the CRM connects with other systems. Every contact form on endora.pl sends the enquiry to the CRM API, authenticated with a token that has limited permissions. In response the CRM:

  • creates an opportunity "WWW: topic – company" with the source "Website",
  • matches the contact by email address or creates a new one,
  • matches the company by name or creates it as unverified,
  • stores the form contents, landing page, referrer and UTM parameters,
  • notifies the owner in the CRM, and by push or email depending on their settings.

Nobody retypes enquiries, and the source reports immediately show which campaigns and pages bring them in. The same token mechanism serves the LinkedIn extension and can serve other systems: an online store, a B2B platform, an ERP or a marketing tool.

The salesperson's dashboard

The CRM dashboard with upcoming tasks, calendar events, the LinkedIn queue and new events

The day starts on the dashboard: tasks for today and the coming days, meetings from Google Calendar, the LinkedIn message queue and new events, such as an opportunity from the form or a client opening an offer. Tasks and events sync both ways with Google, so salespeople can work wherever they prefer.

A PWA: the CRM on the road

Endora's CRM on a phone as a PWA: the dashboard, the follow-up queue and opportunity details

The CRM works as a PWA. Salespeople install it on their phone from the browser, with no app store, and get an icon on the home screen and push notifications. Before a client meeting they check the conversation history and the offer, after it they add a note and a task, and between meetings they tick off follow-ups from the queue. Every view fits a small screen, and each user chooses which notifications they get and through which channel.

Analytics: which sources really sell

The opportunity sources report: number of opportunities, win rate and won value for LinkedIn, email, partners and the website

11 reports answer questions that used to need a spreadsheet: how much revenue each channel brought in, where opportunities drop out of the funnel, how much we lose on rejected offers and which opportunities are stuck. Reports filter by date, owner, source, partner and status, and export to CSV or Excel.

What our own CRM taught us

Building a CRM for ourselves let us test first-hand what we tell our clients. The biggest gain doesn't come from the number of features, but from no longer retyping data between systems. Integrations are worth designing from the start, because an API added at the end usually stops at exports. Automation pays off where the decision is obvious, as with an enquiry from the form. Where a salesperson's judgement matters, one click works better than a rule that turns every newsletter into an opportunity.

If your sales process has its own stages, channels and documents, and an off-the-shelf CRM forces your team into workarounds, let's talk about a custom CRM.

Diagnosis

Client data in five places at once

LinkedIn on its own

We ran invitations and follow-ups in a separate extension. When a conversation turned concrete, the contact had to be copied elsewhere.

Email in private inboxes

Agreements with a client sat in one salesperson's Gmail. The rest of the team couldn't see what had been promised, or when.

Website enquiries by email

The endora.pl form sent an email. Someone had to read it and create the contact and company, and the traffic source got lost along the way.

Dates in the calendar, not with the client

Meetings and tasks were in Google but not linked to an opportunity. It was hard to check whether every client had a next step planned.

No numbers on sources

We couldn't quickly say how much business came from LinkedIn versus the website or referrals, so it was hard to decide where to spend our time.

Solution

One CRM built around a B2B agency's sales process

LinkedIn extension

On a LinkedIn profile, the salesperson saves the person to the CRM with one button and assigns a sequence. The extension suggests message templates and a “To send today” queue, but never sends anything by itself.

Gmail inside the CRM

Mail syncs every minute. One click turns a thread into an opportunity, a task or a contact, and a reply sent from the CRM lands in the same Gmail thread.

Opportunities, offers and client decisions

Configurable sales stages, offers with Min and Max variants, and an offer link that shows when the client opened it and whether they accepted it.

Google Calendar and Tasks

Meetings and tasks sync both ways with Google Calendar and Google Tasks, and opportunities that sit in a stage longer than planned trigger a notification.

Sales analytics

11 reports: revenue, funnel, sources, won and lost, lost value, time in status and outreach. Each one exports to CSV and Excel.

API and PWA

API tokens for integrations such as the endora.pl forms and the LinkedIn extension. The CRM installs on a phone like an app and sends push notifications.

How we worked

The same process we offer our clients

  1. 01

    Sales process map

    We started by mapping the client's journey: where they come from, who contacts them and when, where the decision is made. The module list came out of that map.

  2. 02

    Specification before code

    Every module had a specification, a plan and a task list before any code was written (Spec-Driven Development). That kept the scope clear and changes easy to review.

  3. 03

    Modules with clear boundaries

    The CRM consists of 24 modules. Each owns its data and talks to the others through events and services, so new features don't break old ones.

  4. 04

    Tests as a constant

    More than 260 automated test files, and the API contract is checked in CI. Integrations such as the website forms keep working after changes in the CRM.

Results

Less retyping, more conversations with clients

  • ✓ The full client history in one place: the LinkedIn profile, Gmail correspondence, notes, tasks and offers on one opportunity
  • ✓ Enquiries from endora.pl reach the CRM on their own, with the topic, message, landing page and UTM parameters, and the owner gets notified
  • ✓ An opportunity or task from an email in seconds, without copying data between systems
  • ✓ Salespeople work on the road from their phone: today's tasks, the follow-up queue and opportunity details in a PWA with push notifications
  • ✓ We know which sources sell: reports show revenue and win rate separately for LinkedIn, email, the website and partners
  • ✓ The CRM is open to further integrations: any system with an API token can create opportunities and contacts

Have a specific challenge?

Don't just read about it - let's talk about your case.