English uses "have been doing" and "had been doing" to express how long an action has been in progress. Spanish has its own set of constructions for this — and they work quite differently from English. Instead of a perfect progressive tense, Spanish uses special framing structures built around hacer, llevar, and desde. These constructions are extremely common in everyday Latin American Spanish, and mastering them is essential for narrating events with precision.
This page covers all the major duration-framing patterns, how they interact with other tenses, and how they transform in complex sentences.
Pattern 1: Hace + time + que + present (ongoing action)
This is the present-tense duration frame. It expresses an action that started in the past and is still happening now.
The structure: hace (present tense of hacer) + time expression + que + present tense verb. The present tense verb signals that the situation is still in effect at the moment of speaking.
Alternative word order
The same meaning can be expressed with the time phrase at the end:
Vivo aquí hace dos años.
I've been living here for two years.
This inverted order is very common in casual Latin American speech. The meaning is identical.
Pattern 2: Hacía + time + que + imperfect (past ongoing action)
This is the past-tense version of Pattern 1. It describes an action that had been going on for a period of time at a specific point in the past.
Hacía dos años que vivía en Lima.
I had been living in Lima for two years.
Hacía tres horas que esperaban.
They had been waiting for three hours.
The structure: hacía (imperfect of hacer) + time expression + que + imperfect tense verb. Both hacía and the main verb are in the imperfect because the situation was ongoing at the reference point in the past.
Interrupted by the preterite
The most powerful use of this pattern is when the ongoing action is interrupted by a sudden event in the preterite:
Hacía seis meses que salían juntos cuando decidieron casarse.
They had been dating for six months when they decided to get married.
The imperfect (vivía, esperaban, salían) sets the ongoing background; the preterite (conseguí, llegó, decidieron) punctures it with a completed event.
Pattern 3: Llevaba + time + gerund (past ongoing action)
This pattern uses llevar in the imperfect followed by the time expression and a gerund. It expresses the same meaning as Pattern 2 but with a different structure.
Llevaba tres años estudiando español.
I had been studying Spanish for three years.
Note the last example: with negation, llevar often uses sin + infinitive instead of the gerund.
Interrupted by the preterite
Just like Pattern 2, this construction combines naturally with a preterite interruption:
Llevaba dos horas estudiando cuando se dio cuenta de que había estado leyendo el capítulo equivocado.
She had been studying for two hours when she realized she had been reading the wrong chapter.
This example shows the pattern inside a more complex sentence: the preterite interruption (se dio cuenta) leads to a que-clause containing yet another past progressive (había estado leyendo).
Pattern 4: Present tense llevar + time + gerund (ongoing now)
The present-tense version of Pattern 3 describes an action that started in the past and continues now:
Llevo dos meses buscando trabajo.
I've been looking for work for two months.
| Pattern | Time reference | Structure | Example |
|---|---|---|---|
| Hace...que + present | Past → now (ongoing) | Hace + time + que + present verb | Hace dos años que vivo aquí |
| Llevo + time + gerund | Past → now (ongoing) | Llevo + time + gerund | Llevo dos años viviendo aquí |
| Hacía...que + imperfect | Earlier past → past point | Hacía + time + que + imperfect verb | Hacía dos años que vivía allí |
| Llevaba + time + gerund | Earlier past → past point | Llevaba + time + gerund | Llevaba dos años viviendo allí |
Pattern 5: Hacía + time + que + no + imperfect (negative duration)
When expressing how long since something last happened, use hacía...que no + imperfect:
Hacía mucho que no la veía.
I hadn't seen her in a long time.
This pattern is extremely common in Latin American Spanish for expressing absence or lack of contact over time.
Interrupted by the preterite
Hacía tres años que no la veía cuando la encontré en el supermercado.
I hadn't seen her in three years when I ran into her at the supermarket.
Pattern 6: Desde hacía (alternative phrasing)
The preposition desde (since) can combine with hacía to express the same meaning as Pattern 2, but with the time expression integrated differently:
Vivía allí desde hacía cinco años.
She had been living there for five years.
This is equivalent to Hacía cinco años que vivía allí. The meaning is identical; only the structure differs.
No la veía desde hacía mucho tiempo.
I hadn't seen her in a long time.
Present-tense version: desde hace
Vivo aquí desde hace dos años.
I've been living here for two years.
Equivalent to Hace dos años que vivo aquí.
| Desde version | Equivalent hacía/hace version |
|---|---|
| Vivo aquí desde hace dos años | Hace dos años que vivo aquí |
| Vivía allí desde hacía cinco años | Hacía cinco años que vivía allí |
| No la veía desde hacía mucho | Hacía mucho que no la veía |
Inside complex sentences
These duration frames often appear within larger grammatical structures — reported speech, purpose clauses, and conditional sentences.
In reported speech
Me dijo que hacía dos años que no veía a su familia.
She told me she hadn't seen her family in two years.
Nos contó que llevaba tres meses buscando apartamento.
He told us he had been looking for an apartment for three months.
The duration frame sits inside the reported clause, governed by dijo que or contó que. The imperfect stays imperfect — it does not shift further because it is already in the past.
In conditional sentences
Si hacía tanto tiempo que no hablaban, era lógico que se sintieran incómodos.
If they hadn't spoken in so long, it made sense that they'd feel uncomfortable.
With a purpose clause
Llevaba meses ahorrando para que pudieran ir de vacaciones.
She had been saving for months so they could go on vacation.
Common mistakes
Using the preterite instead of the imperfect in the duration frame:
"Hacía dos años que viví en Lima" is wrong — viví (preterite) treats the action as completed, which contradicts the ongoing nature of the duration frame. The correct form is "Hacía dos años que vivía en Lima" — vivía (imperfect) expresses the ongoing action.
Translating English "for" as por or para:
Compare: "Viví en Lima por dos años" (I lived in Lima for two years — completed, no longer there) is acceptable but conveys a different meaning. For the ongoing sense, use "Hacía dos años que vivía en Lima" (I had been living in Lima for two years — and was still there at the reference point).
Forgetting to match the tense of hacer or llevar with the main verb:
The framing verb (hace/hacía, llevo/llevaba) and the main verb must agree in temporal perspective. Present with present, imperfect with imperfect.
Extended narration example
Here is a passage that combines several duration frames with other tenses, showing how they work together in natural storytelling:
Llevaba tres años viviendo en Buenos Aires cuando conoció a Lucía. Hacía tiempo que no se sentía tan a gusto con alguien. Ella le contó que hacía dos años que trabajaba en una editorial y que llevaba meses queriendo cambiar de carrera.
He had been living in Buenos Aires for three years when he met Lucía. He hadn't felt so comfortable with someone in a long time. She told him she had been working at a publishing house for two years and had been wanting to change careers for months.
Four duration frames in a short paragraph: llevaba tres años viviendo, hacía tiempo que no se sentía, hacía dos años que trabajaba, llevaba meses queriendo. Each one places an ongoing action against a backdrop of measured time.
Summary
- Hace
- time + que
- present = ongoing action from past to now ("I've been doing for...").
- time + que
- Hacía
- time + que
- imperfect = ongoing action up to a past point ("I had been doing for...").
- time + que
- Llevaba
- time + gerund = same as hacía...que
- imperfect, different structure.
- time + gerund = same as hacía...que
- Llevo
- time + gerund = same as hace...que
- present, different structure.
- time + gerund = same as hace...que
- Desde hace/hacía = alternative phrasing with identical meaning.
- These frames combine naturally with preterite interruptions, reported speech, and other complex structures.
- Always use the imperfect (not preterite) in the duration frame — the action must be ongoing.
Choosing between hace...que and llevar + gerund
Both constructions express the same meaning, but they differ in style and flexibility:
- Hace...que
- conjugated verb is slightly more neutral and works in all contexts.
- Llevar
- gerund feels more vivid and immediate — the gerund emphasizes the ongoing action itself.
- Llevar is especially natural when the focus is on the activity: "Llevo dos horas cocinando" (I've been cooking for two hours) foregrounds the cooking.
- Hace...que is especially natural when the focus is on the time: "Hace dos horas que cocino" foregrounds the two hours.
In practice, native speakers switch between them freely. Both are equally correct and equally common across Latin America.
For the imperfect tense itself, see Uses of the Imperfect. For how the preterite interrupts ongoing actions, see Uses of the Preterite.
Related Topics
- Reporting Conditional SentencesC1 — How each type of si-clause transforms in indirect speech, why Types 2 and 3 resist backshifting, and how to report como si constructions.