Product How it works Channel, sheet, the record's run Architecture Espo on one side, the API on the other The model It proposes the mapping. It does not save. The run Cadence, and this morning's number Rules Owner, key, reject Sheets The ones Espo already has The field Who wins if the cell is empty The record How it enters and how it leaves What can go wrong Preview, read mode, the switch
Channels Channels File, table, call, outbound Recipes A mapping to review The trial The repository, an empty Espo
Nesso Why Nesso Not SQL, not a second CRM Who it is for Who has to trust the run Decisions The ones the code keeps The project The public repository
FAQ The trial
Italiano English
EspoCRM · Channel · Sheet · Fields

Tonight's file enters Espo.
The salesperson's note stays.

Nesso is the engine between an external system and EspoCRM. You choose the channel, the sheet and the mapping. The passage uses only Espo's API. It is not a second CRM and it does not have an ERP's name written in the code.

API
No SQL on Espo
Owner
An empty cell does not wipe everything
Preview
You can look without writing
History
What disappears is closed, not deleted

Channels · an ERP's name is not in the code

W
Webhook
Inbound
DB
Database
SELECT only
C
CSV
File
H
HTTP
Outbound
X
Excel
Same as CSV
S
SFTP
Remote file
P
PDF
On the customer
D
Documento
Folder
W
Webhook
Inbound
DB
Database
SELECT only
C
CSV
File
H
HTTP
Outbound
X
Excel
Same as CSV
S
SFTP
Remote file
P
PDF
On the customer
D
Documento
Folder

The channels the engine already has are the ones on show. Write-back, the queue and the portal filter stay off until they are turned on. Mail, the Advanced Pack and Espo users do not pass through here.

Who has to trust the run

Four fears, four answers already in the engine

They are not characters. They are the people who, in a company with Espo and an ERP, have to say yes. The site does not promise they will switch it on alone on Monday.

Owner

Wants one number: today's accounts are in sync, and the balance of the totals if there is an amount. It is a check. It does not write.

Sales

Wrote a note yesterday. The field belongs to Espo: tonight's file does not clear it. The sheet shows who wrote last.

Finance

A bad file must not close customers in silence. There is the preview, a VAT number already present, and undoing the run.

Installer

Four steps, a recipe to review, a switch-on plan, a handover page without passwords. Then they can leave.

The field owner

The source wins. Even if the cell is empty.

That is the default, and it is on purpose. A field can have another owner: Espo. Then the run does not touch it. Without that distinction, "sync" means deleting a person's work.

  • The key is the integration plus the external value. Two systems do not trample each other's records.
  • A row that disappears from the file is closed in Espo and stays in the history. It is not deleted.
  • Writing back to the ERP stays off until you turn it on.
A valid run
ChannelFile, table or call
SheetEspo's
WriteAPI, if the switch is on
SQL on EspoDoes not exist

Two objects

The connection carries. The integration decides.

01

Connection

The physical channel. Webhook, database, file, or outbound HTTP. One connection can have several integrations.

02

Sheet

Account, Contact, Lead, or a sheet Espo already has in the metadata. If it is missing, you create it: the technical name takes the prefix C.

03

Mapping

Which column lands in which field, and who owns it. The synonym proposal does not save. The model, without an address, does not start.

04

Run

By hand, every 5 minutes, every 15, every hour, or at a fixed time. The same integration does not start twice.

A record's run →

Channels

The shape is in the engine. The customer's name is not.

A site that calls, a night file, a SELECT, a PDF whose name contains the company key: they are the same shape. The account, contact and site recipes prepare a mapping to review. They are not a certified ERP connector.

The channels, one by one →
Webhook · database · CSV Inbound
HTTP Outbound
Excel · SFTP · PDF · document Same shape
Write-back · queue · portal · seal Off until turned on
SQL on Espo's tables Out

The rest of the site says the same thing, at length

Before you install

Questions from someone who already has Espo

What is Nesso?
It is the engine that moves records between an external system and EspoCRM. You configure the channel, the sheet and the field mapping. From then on the same engine moves the records. It is not a second CRM and it is not a connector with an ERP's name written in the code.
Does it talk to Espo's tables?
No. Every read and every write toward Espo goes through the HTTP API, with the Espo-Authorization header. No SQL on Espo's tables.
Which channels are there?
Inbound: webhook, a database read with SELECT only, CSV, Excel, SFTP, FTPS, a PDF whose name contains the company key, a document. Outbound: HTTP. The database can be MySQL, MariaDB, Postgres, SQL Server or Oracle.
Who wins if the cell arrives empty?
By default the source wins, even if the cell is empty. A field can have another owner, Espo: then the night run does not clear it. That is the rule that protects a note a person wrote.
If the customer disappears from the file, what happens in Espo?
The record is closed and stays in the history. It is not deleted. The first close asks for confirmation. The right to be forgotten is a different act, and it is not this close.
Does it also write back to the ERP?
Not until write-back is turned on for that integration. When it is on, it touches only the columns you named.
Does it create Espo users from a master file?
No. A team and a person are assigned from a column or from a fixed value. A user is not created.
Can the night run start on its own?
Yes, if the cadence is 5 minutes, 15, one hour, or a fixed time. The same integration does not start twice. Two different integrations can run together. After an error it waits the whole interval, unless retry_failed is on.
Is there a queue that resends failed rows?
It stays off. With retry_queue on, only an inbound row that has an external identity, and not in the same run. Outbound is not sent again: the cursor already retries the record that did not leave.
Are passwords stored in clear text?
Without the NESSO_SECRET_KEY variable, yes, in the SQLite file of the local volume. With the variable a new save is sealed and a password already in clear text still opens. The trial does not set the variable.
Does Nesso run the Espo portal?
No. It does not create portal users and it does not change roles. If the rule is on, outbound skips records of another team. Off, outbound does not change.
Are the recipes my ERP's connector?
No. Accounts, contacts and sites prepare a mapping to review, on the fields Espo already has. The price list points at Product: if the sheet is missing, the fields stay empty. It is not a certified connector.
How do I try it?
From the public repository, with Docker. It starts an empty Espo. Production dumps are not imported. The Gruppo Meridia demo is the proof, not a second product.

All the FAQ →

The trial is the repository. Not a waiting list.

It starts an empty Espo. The Gruppo Meridia demo shows a run. It is not your company, and production dumps are not imported.

Nesso is not a certified connector. The manual lives in the repository, in Italian and in English.

The passage

Espo on one side. The external system on the other.

Nesso stands in the middle. It reads the channel, applies the mapping, and writes through Espo’s API. It does not open the CRM tables.

01

The external system

Not us

A file, a table, a call. That ERP’s name is not in the code. Nesso is not that system.

02

Nesso

This is us

Channel, sheet, fields. If the write switch is off, it does not write. If the field belongs to Espo, it does not clear it.

03

Espo

The sheet

The record, if it is born, is born there. CRM mail stays in Espo. The Advanced Pack is not rewritten.

Nesso always has Espo on one side. It is not a bridge between any two systems.

The product boundary