We run our entire sales pipeline on Coeffection, and the thing I keep coming back to is that the object model bends to our data instead of the other way around. Contact, Company, Lead, Opportunity, Project, Case and Task are all configurable in the entity admin, so when I needed fields like business line, plan type and Stripe subscription ID on our records, I added them myself in about two minutes instead of filing a request or upgrading a tier.
The inbound ingest plus workflow builder is where it saved me the most time. I wired a Stripe purchase into a signed webhook that creates a Contact and then a Lead with the contact already linked, so a sale lands in the pipeline without anyone retyping it. The new graph based builder renders that as a canvas you read left to right, and when they migrated my automation to it, all 18 of my field mappings came across intact.
Day to day, the kanban and list views are fast, the assignee/stage/status filters stick, and the REST API is clean and consistent, which matters because I automate against it.
Support is the real differentiator. Replies come in hours, not days, and several things I have asked for have actually shipped. Release notes go out multiple times a week and are written in plain language rather than changelog jargon.
Biggest unexpected win: it carries a deal through pricing, quote and approval, which most CRMs make you bolt on separately. Review collected by and hosted on G2.com.
It is a young product and it shows at the edges rather than in the core. The most concrete thing I hit recently is that the "+ New Opportunity" and "+ New Company" buttons on the list views did not open a create dialog for me, with no error message either. I ended up creating the records through the API instead, which is fine for me but would stop a non technical user cold.
There are polish gaps that make it feel earlier than it actually is. A couple of admin pages still carry the product's old internal name in the browser tab title. The workflow canvas labels each step with the internal variable name, "Creates $contact" rather than "Creates Contact", and the trigger node does not say which inbound source fires it, so you have to go look that up somewhere else. The dashboard also opens to an empty "Select Dashboard" state with no default, which is a strange first impression.
Defaults are inconsistent between objects. Some list views open filtered to Assignee: Me and others to All, and I have lost time staring at what looked like an empty board before realizing it was just filtered. Our opportunity object also ended up with two competing stage concepts, the pipeline stages on the board plus a separate stage picklist field, which confuses new people on the team.
Documentation and self serve onboarding are the thinnest part. You learn a lot by poking around or by asking, which works because support is responsive, but it will not scale forever. Review collected by and hosted on G2.com.