Organised Editing/Activities/Digitaleo
Template:Organised Editing Activity
Rationale
Digitaleo is a SaaS platform that enables businesses to manage their online presence across multiple directories (Google Business Profile, Apple Business Connect, Bing Places, OpenStreetMap, etc.). When a business owner updates their point-of-sale information on Digitaleo, the changes are automatically published to OpenStreetMap via the API. Each edit corresponds to a single user action this is not an autonomous bot.
The goal is to keep business information (name, address, opening hours, phone, payment methods...) accurate and up-to-date on OpenStreetMap, based on first-party data provided directly by the business owners themselves.
Contact
- Digitaleo (on OSM) (on OSM · edits · contributions · heatmap · comments)

- Email: serviceclient@digitaleo.com
- Website: https://digitaleo.com
Community consultation
This wiki page serves as the primary documentation of the activity. Digitaleo's OSM user profile also describes the editing process and scope. Digitaleo responds to changeset comments and private messages on OSM, and is open to community feedback.
A dedicated topic on the French OSM community forum is available for discussion, feedback, and tracking changes: Digitaleo - suivi et retours.
Hashtag
Changesets are identified with the following tags:
created_by:Digitaleo-OSM-API/1.0source:digitaleo- Changeset comment:
"Update business information"or"Add new business location"
Edits can be tracked via OSMCha.
Timeframe
The activity started in January 2026 and is ongoing with no planned end date. Edits occur continuously as business owners update their information on the Digitaleo platform.
Data source
Who provides the data
All data published to OpenStreetMap by Digitaleo originates from first-party sources:
- Establishment owners who directly manage their own business information (e.g., a bakery owner updating their opening hours).
- Network managers (franchise or brand managers) who manage information for multiple establishments in their network (e.g., a regional manager updating addresses for 50 stores).
This data is not scraped, not imported from third-party databases, and not automatically generated. Each piece of information is entered or validated by a person who has authority over the business.
Multi-publishing context
Digitaleo is a multi-publishing platform. When a user updates their business information, the same data can be published to several platforms simultaneously:
- Google Business Profile
- Apple Business Connect
- Bing Places
- OpenStreetMap
- And others
The user explicitly enables OpenStreetMap publishing for each establishment.
Fields managed
The following business fields are managed by Digitaleo users and may be published to OSM:
| Category | Fields |
|---|---|
| Identity | Name, website, email, SIRET (French business registration number) |
| Phone | Phone number, fax number |
| Address | House number, street, postcode, city |
| Schedule | Opening hours (full weekly schedule with multiple time slots) |
| Food & Drink | Cuisine types, dietary options (vegetarian, vegan, halal, kosher, gluten-free), pastry, chocolate, ice cream, organic |
| Services | Delivery, takeaway, drive-through, indoor seating, outdoor seating, breakfast, wheelchair accessibility, Wi-Fi, reservation, booking URL |
| Payment | Cash, credit cards, debit cards, cheque, contactless, Visa, Mastercard, American Express, Discover, Diners Club, JCB |
| Social media | Facebook, Twitter/X, Instagram, LinkedIn, YouTube, TikTok, Pinterest |
Tools and technical overview
| Parameter | Value |
|---|---|
| Editing method | Automated publication via the OSM API, triggered by individual user actions on the platform |
| OSM API version | v0.6 |
| User-Agent | Digitaleo-OSM-API/1.0
|
| Authentication | OAuth2 Bearer token |
| Rate limiting | 1 request per second |
Changeset created_by |
Digitaleo-OSM-API/1.0
|
Changeset source |
digitaleo
|
Participants
- Digitaleo (on OSM) — single account used for all API edits

Element lifecycle
Search and matching
Before creating a new element, Digitaleo always searches for an existing OSM element that may already represent the business. This avoids creating duplicates.
Search method:
- A bounding box search is performed around the business coordinates (default radius ~22 meters, i.e. ~0.0002 degrees).
- All elements with tags within the bounding box are retrieved.
Matching strategy (two stages):
| Stage | Method | Details |
|---|---|---|
| Fuzzy name matching | Token-based comparison | The business name and OSM element names (name, official_name, brand, alt_name, short_name, old_name, operator) are tokenized. French stop words are removed (de, du, la, le, les, etc.). Accents are normalized. A minimum 60% token overlap ratio is required. Minimum token length: 3 characters.
|
| Exact tag matching | Direct value comparison | Compares phone/contact:phone, email/contact:email, website, ref:FR:SIRET. Phone numbers are normalized (digits only, French +33 prefix replaced by 0). URLs are normalized (lowercase, protocol and www. stripped, trailing slash removed). SIRET numbers have whitespace removed.
|
Decision rules:
- If at least one exact tag match is found, all name-only matches are discarded (higher confidence).
- If multiple elements match ambiguously, no edit is made and the system flags the business for manual review.
Element creation
Element creation occurs only when:
- No existing OSM element was found by the search algorithm, AND
- The user has explicitly authorized the creation (automatic creation is blocked by default).
When creation is authorized:
- A new node is created at the business coordinates.
- A changeset is opened with comment:
"Add new business location"
Example changeset and node creation:
<!-- 1. Open changeset -->
<osm>
<changeset>
<tag k="created_by" v="Digitaleo-OSM-API/1.0"/>
<tag k="source" v="digitaleo"/>
<tag k="comment" v="Add new business location"/>
</changeset>
</osm>
<!-- 2. Create node in changeset -->
<osm>
<node changeset="12345" lat="48.8566" lon="2.3522">
<tag k="name" v="Boulangerie Martin"/>
<tag k="phone" v="+33 1 42 36 12 34"/>
<tag k="email" v="contact@boulangerie-martin.fr"/>
<tag k="website" v="https://boulangerie-martin.fr"/>
<tag k="ref:FR:SIRET" v="12345678901234"/>
<tag k="addr:housenumber" v="12"/>
<tag k="addr:street" v="Rue de Rivoli"/>
<tag k="addr:postcode" v="75001"/>
<tag k="addr:city" v="Paris"/>
<tag k="opening_hours" v="Mo-Sa 07:00-20:00"/>
<tag k="cuisine" v="sandwich"/>
<tag k="pastry" v="yes"/>
<tag k="payment:credit_cards" v="yes"/>
<tag k="payment:contactless" v="yes"/>
<tag k="delivery" v="yes"/>
<tag k="contact:facebook" v="https://www.facebook.com/boulangeriemartin"/>
</node>
</osm>
Element update
When an existing element is found (either by search or because the business was previously linked to an OSM element):
- The current element is fetched from OSM (supports
node,way,relation). - Tags are merged: Digitaleo's tags are applied on top of the existing tags. All tags that Digitaleo does not manage are preserved unchanged.
- Before sending, the merged tags are compared with the current tags. If they are identical, no changeset is created (avoids unnecessary edits).
- A changeset is opened with comment:
"Update business information" - The element's version number is used for optimistic concurrency control. If another edit was made concurrently, the OSM API returns HTTP 409 (Conflict) and the operation is retried.
- For
wayandrelationelements: geometry is fully preserved. Only tags are replaced in the XML, all nodes/members/references remain untouched.
Example: updating a phone number
Before (current OSM element tags):
name=Boulangerie Martin
phone=+33 1 42 36 12 34
amenity=bakery
opening_hours=Mo-Sa 07:00-20:00
wheelchair=yes
Digitaleo sends these tags (phone changed, other fields same):
phone=+33 1 42 36 99 99
email=contact@boulangerie-martin.fr
addr:street=Rue de Rivoli
opening_hours=Mo-Sa 07:00-20:00
Result after merge (sent to OSM):
name=Boulangerie Martin -- preserved (already existed on OSM)
phone=+33 1 42 36 99 99 -- updated by Digitaleo
email=contact@boulangerie-martin.fr -- added by Digitaleo
amenity=bakery -- preserved (not managed by Digitaleo)
opening_hours=Mo-Sa 07:00-20:00 -- unchanged
wheelchair=yes -- preserved (not managed by Digitaleo)
addr:street=Rue de Rivoli -- added by Digitaleo
Important: Tags like amenity, shop, building, wheelchair that were added by other contributors are never removed or modified by Digitaleo.
Name handling
The name tag receives special treatment:
- On creation: The name is set from the business data.
- On update of an existing element: If the element already has a
nametag, Digitaleo does not overwrite it. The existing OSM name is preserved. - Exception: If a name incoherence was previously detected (the OSM name does not match the expected business name) and the user explicitly republishes, the name will be overwritten.
The name is resolved with this priority:
- Platform-specific name configured for OpenStreetMap (if the user set a different name for OSM)
- Network brand name
- Business name
Synchronization monitoring
A background process periodically checks whether the data on OSM still matches what Digitaleo expects:
- Frequency: Every 2 hours (checks businesses whose last refresh exceeds the threshold).
- Process: Builds the expected tag set from local data, compares it with the current OSM element using the same merge and sanitization logic as updates, and checks if the result differs.
Behavior on desynchronization:
- If tags differ: the business is flagged as "out of sync" internally. Digitaleo does NOT automatically overwrite external changes. The user must explicitly choose to republish.
- If tags match and the business was previously flagged: the flag is automatically cleared (self-healing).
- Name coherence is also checked: if the OSM name no longer matches the expected name, the business is flagged for review.
This means: If an OSM contributor corrects a tag on an element managed by Digitaleo, that correction will be detected but not automatically reverted. The business owner or network manager will be notified that their data is out of sync and must decide whether to accept the OSM change or republish their version.
Tag deletion
Specific tags can be removed from an element while preserving all other tags. The element is fetched, the specified tags are removed from the tag set, and the element is updated with the remaining tags. Geometry and unrelated tags are not affected.
Complete tag mapping
Basic information
| Digitaleo Field | OSM Tag | Format / Notes |
|---|---|---|
| Business name | name |
See Name handling for conditions |
| Website | website |
URL forced to https://, validated format. Social media URLs are reclassified (see Tag sanitization).
|
| Contact email | email |
As entered by the user |
| SIRET | ref:FR:SIRET |
14-digit French business registration number (ref:FR:SIRET) |
Phone numbers
| Digitaleo Field | OSM Tag | Format |
|---|---|---|
| Phone | phone |
International format via libphonenumber (e.g., +33 1 42 36 12 34)
|
| Fax | fax |
Same formatting as phone |
Address
French addresses are parsed to extract the house number from the street name.
| Digitaleo Field | OSM Tag | Notes |
|---|---|---|
| Address (number part) | addr:housenumber |
Extracted from the address string. Supports French ordinals: bis, ter, quater, and letter suffixes (e.g., 12B).
|
| Address (street part) | addr:street |
Remainder after house number extraction. Normalized (see Street name normalization). |
| Postal code | addr:postcode |
As entered |
| City | addr:city |
Normalized: all-uppercase names are converted to Title Case (e.g., LYON becomes Lyon)
|
Address parsing examples:
| Input Address | addr:housenumber |
addr:street
|
|---|---|---|
35 cours Fauriel |
35 |
Cours Fauriel
|
12B rue de la Paix |
12B |
Rue de la Paix
|
12 bis avenue Victor Hugo |
12 bis |
Avenue Victor Hugo
|
rue de la Paix |
(none) | Rue de la Paix
|
Opening hours
Business schedules are converted to the OSM opening_hours format.
Conversion rules:
- Days are mapped: Monday→
Mo, Tuesday→Tu, Wednesday→We, Thursday→Th, Friday→Fr, Saturday→Sa, Sunday→Su - Consecutive days with identical hours are grouped into ranges (e.g.,
Mo-Fr 09:00-18:00) - Multiple time slots per day are comma-separated (e.g.,
Mo 09:00-12:00,14:00-18:00) - Different day groups are semicolon-separated (e.g.,
Mo-Fr 09:00-18:00; Sa 10:00-13:00) - End time
23:59is converted to24:00 - Overnight slots are merged: if a business is open until midnight and the next day starts at 00:00, the slots are combined (e.g.,
Fr 18:00-02:00instead ofFr 18:00-24:00; Sa 00:00-02:00)
Example:
A restaurant open Monday-Friday 11:30-14:00 and 18:30-22:30, Saturday 18:30-23:00:
opening_hours=Mo-Fr 11:30-14:00,18:30-22:30; Sa 18:30-23:00
Categories and cuisine
Business categories are mapped to secondary OSM tags. Multiple values are joined with semicolons.
Cuisine tags
| Business Category | cuisine=* Value
|
|---|---|
| sandwich_shop | sandwich |
| pizza_restaurant | pizza |
| sushi_restaurant | sushi |
| burger_restaurant | burger |
| kebab_shop | kebab |
| chinese_restaurant | chinese |
| japanese_restaurant | japanese |
| italian_restaurant | italian |
| french_restaurant | french |
| mexican_restaurant | mexican |
| indian_restaurant | indian |
| thai_restaurant | thai |
| vietnamese_restaurant | vietnamese |
| lebanese_restaurant | lebanese |
| turkish_restaurant | turkish |
| korean_restaurant | korean |
| seafood_restaurant | seafood |
| steak_house | steak_house |
| crepe_restaurant | crepe |
| coffee_shop | coffee_shop |
| tea_house | tea |
| donut_shop | donut |
| ramen_restaurant | ramen |
| fish_and_chips_restaurant | fish_and_chips |
| falafel_restaurant | falafel |
| greek_restaurant | greek |
| spanish_restaurant | spanish |
| portuguese_restaurant | portuguese |
| moroccan_restaurant | moroccan |
| african_restaurant | african |
| caribbean_restaurant | caribbean |
| peruvian_restaurant | peruvian |
| brazilian_restaurant | brazilian |
| argentinian_restaurant | argentinian |
A business with categories "pizza_restaurant" and "italian_restaurant" would produce: cuisine=pizza;italian
Diet tags
| Business Category | OSM Tag | Value |
|---|---|---|
| vegetarian_restaurant | diet:vegetarian |
only
|
| vegan_restaurant | diet:vegan |
only
|
| halal_restaurant | diet:halal |
yes
|
| kosher_restaurant | diet:kosher |
yes
|
| gluten_free_restaurant | diet:gluten_free |
yes
|
Boolean category tags
| Business Category | OSM Tag | Value |
|---|---|---|
| pastry_shop | pastry |
yes
|
| ice_cream_shop | ice_cream |
yes
|
| organic_shop | organic |
yes
|
| second_hand_store | second_hand |
yes
|
| repair_service | repair |
yes
|
Services
| Digitaleo Attribute | OSM Tag | Value | Notes |
|---|---|---|---|
| Delivery available | delivery |
yes |
|
| Takeout available | takeaway |
yes |
|
| Drive-through | drive_through |
yes |
|
| Dine-in service | indoor_seating |
yes |
|
| Outdoor seating | outdoor_seating |
yes |
|
| Serves breakfast | breakfast |
yes |
|
| Wheelchair-accessible entrance | wheelchair |
yes |
Highest priority |
| Wheelchair-accessible seating | wheelchair |
limited |
Only if entrance is not accessible |
| Wheelchair-accessible restroom | toilets:wheelchair |
yes |
|
| Free Wi-Fi | internet_access + internet_access:fee |
wlan + no |
|
| Paid Wi-Fi | internet_access + internet_access:fee |
wlan + yes |
|
| Appointment required | reservation |
required |
|
| Booking URL | website:booking |
(URL) | Sanitized URL (forced https) |
Payment methods
| Digitaleo Attribute | OSM Tag | Value |
|---|---|---|
| Cash only | payment:cash |
yes
|
| Credit card accepted | payment:credit_cards |
yes
|
| Debit card accepted | payment:debit_cards |
yes
|
| Cheque accepted | payment:cheque |
yes
|
| Contactless payment | payment:contactless |
yes
|
| Visa | payment:visa |
yes
|
| Mastercard | payment:mastercard |
yes
|
| American Express | payment:american_express |
yes
|
| Discover | payment:discover |
yes
|
| Diners Club | payment:diners_club |
yes
|
| JCB | payment:jcb |
yes
|
Note: Only payment methods marked as "accepted" by the business owner are published. If a payment method is not enabled, no tag is set (we do not set =no values).
Social media
| Digitaleo Attribute | OSM Tag | Notes |
|---|---|---|
| Facebook URL | contact:facebook |
URL sanitized (forced https, validated) |
| Twitter/X URL | contact:twitter |
|
| Instagram URL | contact:instagram |
|
| LinkedIn URL | contact:linkedin |
|
| YouTube URL | contact:youtube |
|
| TikTok URL | contact:tiktok |
|
| Pinterest URL | contact:pinterest |
Tag sanitization
Before any tag is written to OSM, the following sanitization rules are applied to ensure compliance with OSM conventions and avoid unnecessary changesets.
Tag remapping
Deprecated or non-standard tag forms are remapped to their preferred equivalents according to the OSM wiki:
| Source Tag | Remapped To | Reason |
|---|---|---|
phone |
contact:phone |
Preferred contact namespace |
fax |
contact:fax |
Same |
email |
contact:email |
Same |
url |
website |
website is the preferred form
|
contact:website |
website |
Same |
facebook |
contact:facebook |
Short forms are deprecated |
twitter |
contact:twitter |
Same |
instagram |
contact:instagram |
Same |
linkedin |
contact:linkedin |
Same |
youtube |
contact:youtube |
Same |
tiktok |
contact:tiktok |
Same |
pinterest |
contact:pinterest |
Same |
payment:amex |
payment:american_express |
Full name preferred |
If the target tag already exists on the element, the remapped value is not applied (the existing value takes precedence).
Social media URL reclassification
If the website tag contains a URL pointing to a social media platform, it is automatically reclassified to the appropriate contact:* tag:
| Domain(s) | Reclassified To |
|---|---|
facebook.com, fb.com |
contact:facebook
|
twitter.com, x.com |
contact:twitter
|
instagram.com |
contact:instagram
|
linkedin.com |
contact:linkedin
|
youtube.com, youtu.be |
contact:youtube
|
tiktok.com |
contact:tiktok
|
pinterest.com, pinterest.fr |
contact:pinterest
|
This prevents the common case where a business owner enters their Facebook page as their "website", which would be incorrect per OSM conventions.
Address conflict resolution
OSM elements may use either addr:* or contact:* for address fields. When both forms exist after merging:
- If the OSM element already used
contact:*(e.g.,contact:city): thecontact:*form is kept and updated, theaddr:*duplicate is removed. - If the OSM element used
addr:*or had no address tags: theaddr:*form is kept, thecontact:*duplicate is removed.
This respects the tagging style already established on the element.
Street name normalization
Street names are normalized following French OSM street naming conventions:
Abbreviation expansion:
| Abbreviation(s) | Expanded Form |
|---|---|
| av, ave | Avenue |
| bd, bvd, blvd, bld | Boulevard |
| pl | Place |
| rte | Route |
| imp | Impasse |
| all | Allee |
| ch, chem | Chemin |
| crs | Cours |
| fg, fbg | Faubourg |
| sq | Square |
| pass | Passage |
| prom | Promenade |
| espl | Esplanade |
| res | Residence |
| lot | Lotissement |
| ham | Hameau |
| trav | Traverse |
| sent | Sentier |
| rpd, rpt | Rond-Point |
| carr | Carrefour |
Capitalization rules:
- First word: always Title Case
- French articles and prepositions (
de, du, des, la, le, les, au, aux, en, et, ou, sur): lowercase (except in first position) - Elisions handled:
d'Artagnan,l'Etoile - Proper nouns: Title Case
Canonical comparison: If the current OSM value is canonically equivalent (same street after abbreviation expansion and lowercasing), the current OSM value is preserved to avoid an unnecessary changeset. For example, if OSM has Av. de Paris and Digitaleo sends Avenue de Paris, the existing value is kept.
Other sanitization rules
- City name normalization: All-uppercase city names are converted to Title Case (e.g.,
LYON→Lyon,AIX EN PROVENCE→Aix En Provence). - Identity tag cleanup: If
official_nameis identical toname(case-insensitive),official_nameis removed. Per the wiki,official_nameshould only be used when it differs fromname. - City suffix removal from name: If the business name ends with the city name, the city is stripped (e.g.,
Boulangerie Martin Lyon→Boulangerie Martin). Respects word boundaries (e.g.,VetAmboiseis not modified even though it ends withAmboise). French prepositions are also cleaned up (e.g., trailing "de", "du", "des", "d'" are removed). - Blank value removal: Tags with empty or whitespace-only values are stripped before sending to OSM.
What Digitaleo does NOT do
- Does not delete OSM elements. Digitaleo never removes nodes, ways, or relations from OSM.
- Does not overwrite external modifications automatically. If a contributor changes a tag on an element managed by Digitaleo, the change is detected but not reverted. The user is notified.
- Does not create elements automatically by default. Automatic creation is blocked; the user must explicitly authorize it.
- Does not modify geometry. Nodes are not moved, way shapes are not changed, relation members are not modified. Only tags are updated.
- Does not manage the primary classification tag. Tags like
amenity=*,shop=*,tourism=*,healthcare=*,building=*are left untouched. Digitaleo only manages the secondary tags listed in this documentation. - Does not set negative values. If a service or payment method is not enabled, no tag is written (we never set
delivery=noorpayment:visa=no).
Changeset conventions
All changesets created by Digitaleo follow a consistent pattern:
| Changeset Tag | Value | Description |
|---|---|---|
created_by |
Digitaleo-OSM-API/1.0 |
Identifies the tool |
source |
digitaleo |
Identifies the data source |
comment |
Add new business location |
Used when creating a new node |
comment |
Update business information |
Used when updating an existing element |
Each create or update operation opens its own changeset, performs the single modification, and immediately closes the changeset. This ensures each changeset contains exactly one logical change for maximum traceability.
Training/instructions
Edits are performed programmatically by the Digitaleo platform, not by individual human mappers. The editing logic is maintained by the Digitaleo R&D team, which ensures:
- Compliance with OSM tagging conventions (see Tag sanitization)
- Proper tag merging (no deletion of unmanaged tags)
- One changeset per business update
- Accurate changeset comments and metadata
- Rate limiting (1 request per second)
Measuring our success
- Number of changesets and elements edited, tracked via OSMCha
- Community feedback via changeset comments and OSM messages
- Internal monitoring of edit success rate and API errors
Post-event clean-up
- Changeset comments from the OSM community are monitored and addressed.
- In case of reported issues, Digitaleo can identify and revert affected changesets.
- Internal quality checks are performed on the editing logic before deployment.
Community feedback
We welcome feedback from the OSM community on our editing practices. If you notice:
- Incorrect tag usage that does not follow OSM conventions
- Missing tag mappings that we should add
- Incorrect data on a specific element (please note that data corrections should be reported to the business owner via Digitaleo, as we do not overwrite external changes)
- Suggestions for improvement to our sanitization rules or matching algorithm
Please use the discussion page of this wiki page, the dedicated topic on the French OSM forum, or contact us at serviceclient@digitaleo.com.
Results
Results and statistics may be shared on this page periodically. Community members are welcome to reach out via the contact methods listed above for any questions or concerns.