Monitoreo mensual del empleo de plataformas digitales

Autor/a

Nicolás Ratto

Fecha de publicación

16 de junio de 2026

El presente documento consiste en un monitoreo mensual del empleo en el sector de las plataformas digitales de Chile, en base a la Encuesta Nacional de Empleo del Instituto Nacional de Estadísticas (INE). Esto, para el proyecto Hacia una regulación laboral efectiva para los trabajadores de plataformas digitales, financiado por la Friedrich-Ebert-Stiftung (FES) Chile.

Todos los datos son públicos y fueron descargados desde el sitio web del INE.

Cargar paquetes

Ver código
library(haven)
library(sjlabelled)
library(ggplot2)
library(dplyr)
library(lubridate)
library(magrittr)
library(scales)
library(knitr)
library(arrow)

if (!dir.exists("output")) {
  dir.create("output")
}

if (!dir.exists("output/graficos")) {
  dir.create("output/graficos")
}

if (!dir.exists("output/tablas")) {
  dir.create("output/tablas")
}

Carga bases de datos

Ver código
ds <- open_dataset("../../../../PROSPECTIVA SpA/minuta ENE/ene_empleo/output/data")

pd <- ds %>% 
  filter(ano_trimestre>=2020) %>% 
  select(periodo, fact_cal, plataformas_digitales) %>%
  filter(plataformas_digitales == 1) %>%
  group_by(periodo) %>%
  summarise(plataformas = sum(fact_cal, na.rm = TRUE)) %>%
  arrange(periodo) %>%
  collect()

ocupados <- ds %>% 
    filter(periodo>="2020-02-01") %>% 
  filter(activ == 1) %>%
  group_by(periodo) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  arrange(periodo) %>%
  collect()

pd <- merge(pd,ocupados,by="periodo")

Plataformas digitales (todas las reportadas)

Ver código
# Detalle

aux <- ds %>% 
  filter(periodo>="2020-02-01") %>% 
  group_by(periodo) %>%  
  summarise(n=n())%>% 
  collect()

nombres_plataformas <- ds %>% 
  filter(periodo>="2020-02-01") %>% 
  group_by(pd_especifique) %>%
  summarise(ocupados_acumulado = sum(fact_cal, na.rm = TRUE)) %>%
  mutate(ocupados_acumulado=round(ocupados_acumulado/nrow(aux))) %>% 
  arrange(-ocupados_acumulado) %>% 
  collect()

nombres_plataformas<-nombres_plataformas %>% filter(pd_especifique!="")

head(nombres_plataformas,10) %>% kable(caption = "Principales empresas de plataformas reportadas (promedio ocupados mensuales)", col.names = c("Plataformas","Ocupados mensualizado"))
Principales empresas de plataformas reportadas (promedio ocupados mensuales)
Plataformas Ocupados mensualizado
INSTAGRAM 53791
FACEBOOK 37921
WHATSAPP 36095
UBER 30656
FACEBOOK MARKETPLACE 7105
FACEBOOK INSTAGRAM 6869
UBER EATS 4651
PEDIDOS YA 3856
INSTAGRAM FACEBOOK 3566
CORNERSHOP 3557
Ver código
ggplot(pd, aes(x = periodo, y = plataformas)) +
  geom_line(linewidth = 1.2, color = "#2C3E50") +
  geom_point(size = 2.5, color = "#2C3E50") +
  
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
  
  labs(
    title = "Ocupados en plataformas digitales (2020-2026)",
    subtitle = "Solo primera ocupación",
    x = NULL,
    y = "Número de personas",
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Todas las plataformas, excluyendo las redes sociales

Ver código
## quitar plataformas de venta online y redes sociales
nombres_plataformas_para_filtrar <- subset(nombres_plataformas,
                                           !(pd_especifique %in% 
                                               c("INSTAGRAM",
                                                 "FACEBOOK",
                                                 "WHATSAPP",
                                                 "FACEBOOK INSTAGRAM",
                                                 "FACEBOOK MARKETPLACE",
                                                 "INSTAGRAM FACEBOOK",
                                                 "FACEBOOK WHATSAPP",
                                                 "WHATSAPP FACEBOOK",
                                                 "WHATSAPP FACEBOOK INSTAGRAM",
                                                 "INSTAGRAM FACEBOOK WHATSAPP",
                                                 "INSTAGRAM WHATSAPP",
                                                 "MARKETPLACE",
                                                 "FACEBOOK INSTAGRAM WHATSAPP",
                                                 "WHATSAPP INSTAGRAM",
                                                 "WHATSAPP INSTAGRAM FACEBOOK",
                                                 "FACEBOOK MARKETPLACE INSTAGRAM",
                                                 "TIKTOK",
                                                 "FACEBOOK WHATSAPP INSTAGRAM",
                                                 "INSTAGRAM TIKTOK",
                                                 "FACEBOOK INSTAGRAM TIKTOK",
                                                 "MARKETPLACE FACEBOOK",
                                                 "MARKETPLACE INSTAGRAM",
                                                 "INSTAGRAM WHATSAPP FACEBOOK",
                                                 "INSTAGRAM MARKETPLACE",
                                                 "TELEGRAM",
                                                 "FACEBOOK MARKETPLACE WHATSAPP",
                                                "FACEBOOK MARKETPLACE INSTAGRAM WHATSAPP",
                                                 "INSTAGRAM FACEBOOK TIKTOK",
                                                "WATTASPP INSTAGRAM",
                                            "FACEBOOK WHATSAPP INSTAGRAM TIKTOK",
                                                "TIKTOK FACEBOOK INSTAGRAM WHATSAPP",
                                                "FACEBOOK TIKTOK INSTAGRAM",
                                                "FACEBOOK INSTAGRAM MARKETPLACE",
                                                 "FACEBOOK TIKTOK",
                                            "WHATSAPP FACEBOOK YAPO",
                                            "INSTAGRAM FACEBOOK WHATSAPP TIKTOK",
                                                "WHATSAPP TIKTOK FACEBOOK",
                                                 "TWITTER INSTAGRAM",
                                            "FACEBOOK MARKETPLACE INSTAGRAM WHATSAPP FACEBOOK",
                                                 "INSTAGRAM MUNICIPALIDAD DE CONDES",
                                                 "INSTAGRAMWSP")))


pd2 <- ds %>% 
  filter(periodo>="2020-02-01" & plataformas_digitales == 1 ) %>% 
  filter(pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>% 
  group_by(periodo) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  collect()

pd2 <- pd2 %>% arrange(-desc(periodo))

head(nombres_plataformas_para_filtrar,10) %>% 
  kable(caption = "Principales empresas de plataformas reportadas, sin redes sociales", col.names = c("Plataformas","Ocupados mensualizado"))
Principales empresas de plataformas reportadas, sin redes sociales
Plataformas Ocupados mensualizado
UBER 30656
UBER EATS 4651
PEDIDOS YA 3856
CORNERSHOP 3557
MERCADOLIBRE 2916
DIDI 2277
RAPPI 2056
INDRIVER 1776
CABIFY 730
YOUTUBE 470
Ver código
ggplot(pd2, aes(x = periodo, y = ocupados)) +
  geom_line(linewidth = 1.2, color = "#2C3E50") +
  geom_point(size = 2.5, color = "#2C3E50") +
  
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
  
  labs(
    title = "Ocupados en plataformas digitales, sin redes sociales (2020-2026)",
    subtitle = "Solo primera ocupación.",
    x = NULL,
    y = "Número de personas",
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Plataformas georreferenciadas (Ley 21.431)

Ver código
## quitar plataformas de arriendo dptos y streaming
nombres_plataformas_para_filtrar <- subset(nombres_plataformas_para_filtrar,
                                           !(pd_especifique %in% 
                                               c("YOUTUBE",
                                                 "AIRBNB",
                                                 "BOOKING",
                                                 "WHATSAPP YOUTUBE",
                                                 "TWITCH")))

pd_ley21431 <- ds %>% 
  filter(periodo>="2020-02-01" & plataformas_digitales == 1 ) %>% 
  filter(pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>% 
  group_by(periodo) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  collect()

pd_ley21431 <- pd_ley21431 %>% arrange(-desc(periodo))

head(nombres_plataformas_para_filtrar,10) %>% kable(caption = "Principales empresas de plataformas reportadas, Ley 21431", col.names = c("Plataformas","Ocupados mensualizado"))
Principales empresas de plataformas reportadas, Ley 21431
Plataformas Ocupados mensualizado
UBER 30656
UBER EATS 4651
PEDIDOS YA 3856
CORNERSHOP 3557
MERCADOLIBRE 2916
DIDI 2277
RAPPI 2056
INDRIVER 1776
CABIFY 730
AMIDA 356
Ver código
ggplot(pd_ley21431, aes(x = periodo, y = ocupados)) +
  geom_line(linewidth = 1.2, color = "#2C3E50") +
  geom_point(size = 2.5, color = "#2C3E50") +
  
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
  
  labs(
    title = "Ocupados en plataformas digitales Ley 21.431 (2020-2026)",
    subtitle = "Solo primera ocupación.",
    x = NULL,
    y = "Número de personas",
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Ver código
ggsave(
  filename = "output/graficos/grafico_ocupados_ley21431.png",
  plot = last_plot(),
  width = 13.33,
  height = 7.5,
  units = "in",
  dpi = 300
)
Ver código
## gráfica conjunta

pd <- pd %>% select(periodo,plataformas) %>% mutate(tipo="todas") %>% 
  rename(ocupados=plataformas)
pd_ley21431 <- pd_ley21431 %>% select(periodo,ocupados) %>% mutate(tipo="ley21431")

pd_ley21431 <- bind_rows(pd,pd_ley21431)

ggplot(pd_ley21431, aes(x = periodo, y = ocupados, color = tipo, group = tipo)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 2.5) +
  
  scale_color_manual(values = c("todas" = "#2C3E50", "ley21431" = "#E74C3C")) +
  
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ","),
          breaks = seq(0, max(pd_ley21431$ocupados, na.rm = TRUE), by = 50000)) +
  
  labs(
    title = "Ocupados en plataformas digitales (2020-2026)",
    subtitle = "Solo primera ocupación. Todas y Ley 21.431.",
    x = NULL,
    y = "Número de personas",
    color = NULL,
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Ver código
ggsave(
  filename = "output/graficos/grafico_ocupados.png",
  plot = last_plot(),
  width = 13.33,
  height = 7.5,
  units = "in",
  dpi = 300
)

Características de estas plataformas

Desarrollo pendiente.

Ver código
#ene_last %>% 
#  filter( plataformas_digitales == 1 & 
#            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
#  group_by(ocup_honorarios) %>% 
#  summarise(
#    ocupados = sum(fact_cal, na.rm = TRUE),
#    .groups = "drop"
#  ) %>% 
#  mutate(percent=round(ocupados/sum(ocupados)*100,1))

Segunda ocupación

Ver código
# library(haven)
# ene_last <- read_dta("~/Library/CloudStorage/OneDrive-UniversidadCatólicadeChile/PROSPECTIVA SpA/minuta ENE/ene_empleo/input/ene-2026-03-fma.dta")
# ene_last %>% select("plataformas_digitales", "pd_especifique",  "b19"   ,                "dependencia_segunda" , "sda_pd",   "sda_pd_especifique"  )

segunda <- ds %>% 
  filter(periodo>="2020-02-01" & sda_pd == 1 & plataformas_digitales!=1) %>% 
  filter(sda_pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  collect() 

segunda <- segunda %>% arrange(-desc(periodo))

nombres_2da <- ds %>% 
  filter(periodo>="2020-02-01" & sda_pd == 1 & plataformas_digitales!=1) %>% 
  group_by(sda_pd_especifique) %>%
  summarise(ocupados_acumulado = sum(fact_cal, na.rm = TRUE)) %>%   filter(sda_pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  mutate(ocupados_acumulado=round(ocupados_acumulado/nrow(aux))) %>% 
  arrange(-ocupados_acumulado) %>% 
  collect()

head(nombres_2da,10) %>% kable(caption = "Principales empresas de plataformas reportadas, Ley 21431 (segunda ocupación)", col.names = c("Plataformas","Ocupados mensualizado"))
Principales empresas de plataformas reportadas, Ley 21431 (segunda ocupación)
Plataformas Ocupados mensualizado
UBER 2706
UBER EATS 545
CORNERSHOP 396
INDRIVER 303
MERCADOLIBRE 285
PEDIDOS YA 254
RAPPI 196
CABIFY 168
DIDI 167
UBER DIDI 89
Ver código
segunda <- segunda %>% select(periodo,ocupados) %>% mutate(tipo="segunda_ley21431")

pd_ley21431 <- bind_rows(pd_ley21431,segunda)

segunda <- pd %>% select(periodo) %>% mutate(ocupados = (pd_ley21431[pd_ley21431$tipo == "ley21431", "ocupados"] + pd_ley21431[pd_ley21431$tipo == "segunda_ley21431", "ocupados"])) %>% mutate(tipo="ley21431_1y2")

pd_ley21431 <- bind_rows(pd_ley21431,segunda)

pd_ley21431 %>% 
  filter(tipo!="todas") %>% 
ggplot(aes(x = periodo, y = ocupados, color = tipo, group = tipo)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 2.5) +
  
  scale_color_manual(values = c("segunda_ley21431" = "#2C3E50", 
                                "ley21431" = "#E74C3C",
                                "ley21431_1y2"="#6A0DAD")) +
  
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ","),
          breaks = seq(0, max(pd_ley21431$ocupados, na.rm = TRUE), by = 10000)) +
  
  labs(
    title = "Ocupados en plataformas digitales Ley 21.431 (2020-2026)",
    subtitle = "Primera y segunda ocupación",
    x = NULL,
    y = "Número de personas",
    color = NULL,
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Ver código
ggsave(
  filename = "output/graficos/grafico_ocupados_ley21431_1_2.png",
  plot = last_plot(),
  width = 13.33,
  height = 7.5,
  units = "in",
  dpi = 300
)

Empresas de plataformas Ley 21431 con mayor crecimiento últimos 4 años

Ver código
nuevas <- ds %>% 
  filter(periodo=="2026-03-01" | periodo=="2022-03-01" & 
           plataformas_digitales == 1 ) %>% 
  filter(pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>% 
  group_by(periodo,pd_especifique) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  collect()

nuevas <- nuevas %>% 
  tidyr::pivot_wider(names_from = periodo, values_from = ocupados,
                         values_fill = 0) 

nuevas %>%  mutate(variacion_porc=round((`2026-03-01` - `2022-03-01`)/`2022-03-01`*100,1)) %>% arrange(-variacion_porc, -`2026-03-01`) %>% 
  kable(caption = "Empresas de plataformas Ley 21431 con mayor crecimiento")
Empresas de plataformas Ley 21431 con mayor crecimiento
pd_especifique 2022-03-01 2026-03-01 variacion_porc
BOOSMAP 0.0000 682.7659 Inf
ZUBALE 0.0000 671.8910 Inf
PICKER UP 0.0000 568.2652 Inf
FACEBOOK MERCADOLIBRE 0.0000 472.7603 Inf
CABIFY 0.0000 460.9287 Inf
VALDISHOPPER 0.0000 446.3462 Inf
DOCTORALIA 0.0000 262.1177 Inf
PREPLY 0.0000 149.6926 Inf
WHATSAPP INDRIVER 0.0000 139.6565 Inf
PICKER 0.0000 116.0609 Inf
WHATSAPP UBER 105.4057 474.4618 350.1
DIDI 1136.4271 2855.1757 151.2
INDRIVER 1076.2016 2413.1800 124.2
UBER 20251.8258 43286.9510 113.7
UBER EATS 6648.4824 11422.5549 71.8
DIDI UBER 201.4056 292.1513 45.1
MERCADOLIBRE 2498.8317 3099.3931 24.0
PEDIDOS YA 5949.2950 3891.6150 -34.6
RAPPI 4031.3591 1439.5398 -64.3
YAPO 188.4394 0.0000 -100.0
BEAT 147.2374 0.0000 -100.0
CORNERSHOP 7316.2612 0.0000 -100.0
UBER DIDI CABIFY 356.9875 0.0000 -100.0
SHOPPER 455.0452 0.0000 -100.0
SIGNAL 241.9763 0.0000 -100.0
UBER DRIVER 544.5727 0.0000 -100.0
JUMBO SHOPPERS 308.6889 0.0000 -100.0
TRANSVIP 789.4278 0.0000 -100.0
FOXER 2747.5299 0.0000 -100.0