Around 5pm (1500 GMT), a vehicle slammed into a crowd of pedestrians on the famous Las Ramblas boulevard.
The promenade in the heart of the city centre is one of the city's busiest streets, normally thronged with tourists and street performers until well into the night.
Witnesses described scenes of chaos and panic as they tried to flee.
Regional interior minister Joaquim Forn said 13 people had died and more than 50 were injured.
Police in the Spanish region of Catalonia where Barcelona is located said on Twitter they have arrested one man and are treating the incident as a "terrorist attack".
Initially a police source said one suspect had fled to a nearby bar, but this was later denied.
One witness told Spain's TVE television he saw the suspect when the van stopped.
How did authorities respond?
Emergency services quickly arrived on the scene and cordoned off the area, with several ambulances and police vehicles responding.
The city also closed down metro stations in the area, with authorities telling people to stay away from the area.
Prime Minister Mariano Rajoy tweeted that he was in contact with the local authorities, saying the priority was to help the victims and facilitate the work of security forces.
Police appealed to people to stay in their homes and avoid unnecessary trips.
Previous attacks in Spain
Spain was hit by what is still Europe's deadliest jihadist attack in March 2004, when bombs exploded on commuter trains in Madrid, killing 191 people in an attack claimed by Al Qaeda-inspired extremists.
In July 2015, a hooded attacker opened fire outside a hotel in downtown Barcelona near Las Ramblas boulevard, leaving two people injured, police said.
No suspected motive for the attack was given.
(This story has not been edited by NDTV staff and is auto-generated from a syndicated feed.)
Get the latest election news, live updates and election schedule for Lok Sabha Elections 2019 on ndtv.com/elections. Like us on Facebook or follow us on Twitter and Instagram for updates from each of the 543 parliamentary seats for the 2019 Indian general elections.