DaData Service Integration for Address Suggestions on Website
DaData is Russian data standardization and enrichment service. Main function for websites — address suggestions while typing: user starts entering street, field automatically suggests options with complete address structure.
Suggestions API Connection
DaData provides ready JavaScript widget:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/suggestions-jquery/dist/css/suggestions.min.css">
<script src="https://cdn.jsdelivr.net/npm/suggestions-jquery/dist/js/jquery.suggestions.min.js"></script>
<script>
$("#address").suggestions({
token: "YOUR_API_KEY",
type: "ADDRESS",
onSelect: function(suggestion) {
// suggestion.data contains structured data
const data = suggestion.data;
document.getElementById('city').value = data.city || data.settlement;
document.getElementById('street').value = data.street;
document.getElementById('house').value = data.house;
document.getElementById('flat').value = data.flat;
document.getElementById('postcode').value= data.postal_code;
document.getElementById('region').value = data.region_with_type;
}
});
</script>
Without jQuery — React Component
import React, { useState, useCallback } from 'react';
import debounce from 'lodash/debounce';
function AddressSuggest({ onSelect }) {
const [suggestions, setSuggestions] = useState([]);
const fetchSuggestions = useCallback(
debounce(async (query) => {
if (query.length < 3) return;
const res = await fetch('https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Token ${process.env.NEXT_PUBLIC_DADATA_KEY}`
},
body: JSON.stringify({ query, count: 5 })
});
const data = await res.json();
setSuggestions(data.suggestions);
}, 300),
[]
);
return (
<div>
<input onChange={e => fetchSuggestions(e.target.value)} placeholder="Start entering address" />
{suggestions.map(s => (
<div key={s.value} onClick={() => { onSelect(s); setSuggestions([]); }}>
{s.value}
</div>
))}
</div>
);
}
Server-side Address Standardization
Beyond suggestions, DaData can standardize address on server — bring arbitrary text to structured form:
$response = Http::withHeaders([
'Authorization' => 'Token ' . env('DADATA_API_KEY'),
'X-Secret' => env('DADATA_SECRET')
])->post('https://cleaner.dadata.ru/api/v1/clean/address', [
'Moscow Lenin Avenue 6 building 3'
])->json();
$address = $response[0];
// $address['city'] = 'Moscow'
// $address['street'] = 'Lenin Avenue'
// $address['house'] = '6', $address['block'] = '3'
// $address['geo_lat'], $address['geo_lon'] — coordinates
// $address['qc'] — quality code (0 = exact, 3 = needs clarification)
Other DaData Functions
-
Name suggestions —
type: "NAME", splits to first/last/patronymic -
Organization suggestions —
type: "PARTY", search by INN with EGRUL/EGRIP enrichment -
Banks —
type: "BANK", search by BIC with auto-fill of details -
Email standardization — fixes domain typos (
gmial.com → gmail.com)
Setup time: few hours.







