Blog Dla Programistów C#/.NET

Ghost jobs w IT: jak rozpoznać fałszywą ofertę pracy? 6 powodów, checklista i Job Tracker w .NET

sobota, 26 września 2026 Tagi: KarieraProgramowanie

Aplikujesz na ofertę, która wygląda, jakby ktoś napisał ją pod Ciebie: C#, .NET, dokładnie Twój stack. Po 2 tygodniach przychodzi mail: "Dziękujemy, zdecydowaliśmy się na innego kandydata". Trudno, bywa. Tyle że miesiąc później wchodzisz na portal z ogłoszeniami i widzisz tę samą firmę, to samo stanowisko i to samo ogłoszenie - świeżutkie, odnowione. I tak co miesiąc. Od roku.

To nie przypadek. To zjawisko ma swoją nazwę: ghost jobs, a po polsku mówię na nie po prostu oferty-wydmuszki. Firmy publikują ogłoszenia, choć wcale nie planują nikogo na nie zatrudnić. Sam się na to złapałem, a im dłużej obserwuję rynek, tym wyraźniej widzę, że to nie pojedyncze wpadki, tylko masowy mechanizm.

W tym artykule dowiesz się, dlaczego firmy publikują takie ogłoszenia (powodów jest więcej, niż myślisz) i jak rozpoznać wydmuszkę, zanim zmarnujesz wieczór na CV i list motywacyjny. Na koniec - bo to w końcu blog o programowaniu - pokażę Ci prosty Job Tracker w C#, który pomaga ogarnąć chaos w aplikowaniu i wyłapuje podejrzane firmy na podstawie danych, a nie przeczuć.

Wersje .NET: Job Tracker, którego kod pokazuję w dalszej części, działa na .NET 10 (Blazor) i trzyma dane w zwykłym pliku JSON. Sam model i logika wykrywania wydmuszek zadziałają jednak także na starszych wersjach: typ DateOnly jest dostępny od .NET 6, jego wbudowana obsługa w System.Text.Json od .NET 7, a wzorce z or w wyrażeniu is od C# 9.

Ghost jobs w IT: jak rozpoznać fałszywą ofertę pracy? 6 powodów, checklista i Job Tracker w .NET

Moja historia: to samo ogłoszenie co miesiąc


Konkretna sytuacja z mojego podwórka. Jakiś czas temu testowo zaaplikowałem na ofertę: senior .NET developer, fajny opis, technologie się zgadzały. Wysłałem CV i dostałem standardowe potwierdzenie.

Po 2 tygodniach przyszedł mail: "Dziękujemy za zainteresowanie, po analizie zgłoszeń zdecydowaliśmy się kontynuować proces z innym kandydatem". Żadnej rozmowy, żadnego zadania rekrutacyjnego, żadnego kontaktu. OK - może faktycznie ktoś był lepszy.

Tylko że mam pewien nawyk. Szkolę wielu programistów i pomagam im w znalezieniu pracy, więc na bieżąco obserwuję rynek. I co zobaczyłem? Miesiąc później - nowe ogłoszenie tej samej firmy na to samo stanowisko. 2 miesiące później - znowu. To ogłoszenie w różnych wariantach wisi do dziś.

I nie chodzi o jedną firmę. Kiedy zaczniesz świadomie przeglądać portale z ofertami, zobaczysz, że takich firm jest naprawdę sporo: te same nazwy, te same stanowiska, odświeżane w kółko. Celowo nie podaję nazw, bo nie chodzi o to, żeby kogokolwiek linczować. Chodzi o zrozumienie mechanizmu, bo jest on masowy.

Skala zjawiska: to nie teoria spiskowa


Gdyby chodziło tylko o moje obserwacje, można by to zrzucić na pecha albo frustrację. Ale ghost jobs zostały już zbadane, najlepiej na rynku amerykańskim. W ankiecie Resume Builder z maja 2024 roku (649 menedżerów odpowiedzialnych za rekrutację) aż 40% firm przyznało, że w 2024 roku opublikowało ogłoszenie bez zamiaru zatrudnienia. To ok. 4 na 10 firm.

Część rekruterów wcale się z tym nie kryje i mówi wprost: "ogłoszenie wisi, bo zawsze jesteśmy otwarci na ludzi". A w IT zjawisko dodatkowo nasiliło się po fali zwolnień i zamrażaniu rekrutacji.

Czyli to nie jest teoria spiskowa sfrustrowanego kandydata, tylko udokumentowana, powszechna praktyka. Pytanie brzmi: po co firmy to robią?

Dlaczego firmy publikują oferty-wydmuszki? 6 powodów


Powodów jest kilka i część z nich naprawdę zaskakuje. Przejdźmy po kolei.

Powód #1: baza CV "na zapas". To najczęstszy powód. Firma nie ma w tej chwili ani budżetu, ani potrzeby, żeby kogoś zatrudnić, ale chce mieć pipeline kandydatów. Kiedy ktoś z zespołu odejdzie, HR otwiera szufladę, wyciąga gotową listę i dzwoni. Ty czekasz na odpowiedź, a oni budują sobie magazyn CV. Problem? Nikt Ci nie mówi, że aplikujesz do szuflady.

Powód #2: firma chce wyglądać na rosnącą. Ogłoszenia o pracę to także marketing. Dużo otwartych rekrutacji wysyła sygnał: "rozwijamy się, mamy projekty". Działa to na klientów, na inwestorów, a nawet na konkurencję. Klient patrzy i myśli: szukają 5 seniorów .NET, widać mają kontrakty. A czasem nie mają nic, tylko dobrze wyglądają. Ogłoszenie o pracę staje się po prostu darmową reklamą.

Powód #3: stanowisko jest już obsadzone. Klasyka. Decyzja zapadła, zanim ogłoszenie poszło w świat: awans wewnętrzny albo znajomy szefa. Procedury wymagają jednak "otwartej rekrutacji", więc ogłoszenie musi powisieć - dla formalności. Ty wysyłasz CV do procesu, który skończył się, zanim się zaczął, a Twoja aplikacja od początku nie ma żadnych szans.

Powód #4: badanie rynku. Firma chce wiedzieć, ile kosztuje senior z Azure i mikroserwisami i ilu takich kandydatów jest dostępnych od ręki. Zamiast płacić za raport płacowy, wystawia ogłoszenie i zbiera oczekiwania finansowe z formularza. Twoje widełki to dla niej darmowe dane, a Ty robisz jej research za darmo.

Powód #5: sygnał dla obecnych pracowników. Ten powód jest najbardziej paskudny. Niektóre firmy wieszają ogłoszenia po to, żeby obecny zespół widział: "ciągle rekrutujemy na Twoje stanowisko". Pracownik widzi ogłoszenie i czuje, że jest zastępowalny, bo nikt tu nie jest niezastąpiony. Cyniczne? Bardzo. Ale się zdarza - to tania metoda na trzymanie ludzi w niepewności zamiast po prostu dobrze im płacić.

Powód #6: wykupione pakiety, agencje i automaty. Na koniec proza życia, która ma kilka odmian:

• Pakiety ogłoszeń. Ktoś kupił na portalu pakiet 20 ogłoszeń, wykorzystał 8, więc wrzuca cokolwiek, żeby reszta się nie zmarnowała.

• Łowienie CV przez agencje. Część agencji rekrutacyjnych wystawia "atrakcyjne oferty", których... nie ma. To przynęta, dzięki której Twoje CV trafia do ich bazy.

• Automatyczne odnawianie. Czasem to zwykłe niechlujstwo: ogłoszenie odnawia się samo i nikt nie pamięta, że projekt umarł pół roku temu.

6 powodów w pigułce. Podsumowując, oferty-wydmuszki biorą się z:

• budowania bazy CV na zapas,
• dbania o wizerunek rosnącej firmy,
• stanowisk, które już są obsadzone,
• badania rynku i widełek,
• straszenia obecnych pracowników,
• pakietów, automatów i łowienia CV.

Zauważ jedną rzecz: w żadnym z tych scenariuszy nie chodzi o Ciebie. Twoje CV może być świetne. Po prostu po drugiej stronie nie ma prawdziwej rekrutacji. I teraz najważniejsze: jak to rozpoznać, zanim zmarnujesz wieczór na aplikację?

Jak rozpoznać ofertę-wydmuszkę? 5 sygnałów ostrzegawczych


Mógłbym wkleić tu zrzuty konkretnych ogłoszeń, bo wydmuszki od razu rzucają się w oczy, ale nie chcę nikomu robić pod górkę. Zamiast tego skupmy się na sygnałach, na które warto zwracać uwagę. Wystarczy do tego portal z ogłoszeniami i LinkedIn.

Sygnał 1: data publikacji i odnowienia. Większość portali pokazuje, kiedy ogłoszenie zostało dodane. Jeśli widzisz "opublikowano 30+ dni temu" albo zauważasz, że ogłoszenie znika i wraca co miesiąc - zapala się czerwona lampka. Prawdziwa rekrutacja w IT zamyka się zwykle w kilka tygodni.

Sygnał 2: opis kopiuj-wklej. Brak nazwy projektu, brak konkretów o zespole, brak informacji, co właściwie będziesz robić. Same ogólniki: "dynamiczny zespół", "ciekawe projekty", "nowoczesne technologie". Prawdziwe ogłoszenie pisze człowiek, któremu zależy na znalezieniu konkretnej osoby - i to widać.

Sygnał 3: brak widełek. Sam brak widełek to jeszcze nie wyrok, ale w połączeniu z innymi sygnałami - mocna poszlaka. Firma, która naprawdę chce kogoś zatrudnić, wie, ile może zapłacić.

Sygnał 4: hurtownia ogłoszeń. Kliknij w profil firmy na portalu i sprawdź, ile ma otwartych pozycji. 30 otwartych rekrutacji w firmie, która według LinkedIna ma 50 pracowników? Coś tu nie gra.

Sygnał 5: LinkedIn nie kłamie. Wejdź na profil firmy na LinkedInie, otwórz zakładkę "Pracownicy" i sprawdź, kiedy ostatnio ktoś dołączył. Firma "rekrutuje" od roku, a ostatnia nowa osoba pojawiła się 14 miesięcy temu? No właśnie.

Checklista: czy to wydmuszka?


Wszystkie sygnały - plus jeden, który znasz tylko Ty, czyli własną historię aplikacji - możesz sprawdzić w kilka minut. Przejdź przez tę checklistę, zanim zaczniesz dopasowywać CV pod konkretną ofertę:

SygnałJak to sprawdzić
Ogłoszenie wisi albo odnawia się od 30+ dniData publikacji na portalu. Ogłoszenie znika i wraca co miesiąc.
Opis bez konkretówCzy wiesz, jaki to projekt, jaki zespół i co będziesz robić? Jeśli nie - same ogólniki.
Brak widełekSam w sobie to nie wyrok, ale wzmacnia pozostałe sygnały.
Podejrzanie dużo otwartych pozycjiProfil firmy na portalu kontra liczba pracowników na LinkedInie.
Brak nowych pracowników od miesięcyLinkedIn: kiedy ostatnio ktoś dołączył do firmy.
Odmowa bez żadnej rozmowy, a ogłoszenie wracaTwoja własna historia aplikacji (jak ją prowadzić - za chwilę).


3 lub więcej odhaczone punkty = prawdopodobnie szkoda Twojego czasu.

2 pytania do rekrutera. Jest jeszcze jeden trik, tym razem na etapie rozmowy - jeśli w ogóle do niej dojdzie. Zadaj rekruterowi 2 pytania:

1. "Od kiedy trwa ta rekrutacja?"
2. "Dlaczego to stanowisko jest otwarte - ktoś odszedł, czy zespół rośnie?"

Po reakcji bardzo dużo poznasz. Konkretna odpowiedź to dobry znak. Kluczenie i ogólniki - wiesz, na czym stoisz.

Strategia kandydata: co z tym zrobić?


Skoro wiesz już, skąd biorą się wydmuszki i jak je rozpoznać, czas na praktyczne wnioski:

• Nie personalizuj godzinami CV pod podejrzane oferty. Czas na dopasowanie aplikacji zostaw na ogłoszenia, które przechodzą checklistę.

• Aplikuj szeroko, ale śledź swoje aplikacje. Bez tego nie zobaczysz żadnych wzorców.

• Wracaj do ogłoszeń po miesiącu. Wydmuszki same się zdradzą, bo wrócą na portal.

• Stawiaj na polecenia i kontakt bezpośredni, a nie tylko na portale z ogłoszeniami.

Najważniejsza rada jest jednak inna: nie bierz odmów do siebie. Jak widać po 6 powodach opisanych wyżej, odmowa często nie ma nic wspólnego z Twoimi umiejętnościami.

Druga rzecz to śledzenie aplikacji. Większość ludzi aplikuje na 30-50 ofert i po kilku tygodniach traci kontrolę: gdzie poszło CV, kiedy, co odpowiedzieli, czy ogłoszenie wróciło? A to właśnie te dane pozwalają wyłapać wydmuszki. I tu dochodzimy do części dla programistów.

Job Tracker w C#: wydmuszki wyłapane na danych


Zrobiłem sobie mini Job Trackera w C# - w Blazorze, żeby ładnie wyglądał. .NET 10, dane w zwykłym pliku JSON, zero bazy danych. Wpisuję do niego każdą firmę, do której aplikowałem, jej status (odrzucili czy zignorowali) i datę za każdym razem, gdy zauważę, że ogłoszenie wróciło na portal.

Na ekranie widać tabelę wszystkich aplikacji z kolorowymi plakietkami statusów i osobną sekcję "Podejrzane wydmuszki", na której górę aplikacja sama wypycha podejrzanych. U mnie na szczycie jest GhostSoft, który mnie zignorował, a potem wrócił z ogłoszeniem aż 4 razy, a za nim Mielarnia CV i Evergreen. (To oczywiście zmyślone przykłady, zanim ktoś zapyta.)

Liczy się powtarzalność. Najważniejsza zasada tej aplikacji brzmi: 1 powrót ogłoszenia to jeszcze nie wydmuszka. Ktoś mógł odejść z zespołu - to normalna rotacja. Dlatego w trackerze jest suwak "Próg powrotów". Przy progu 2 firma Korpo Holding nie trafia na listę, bo jej ogłoszenie wróciło tylko raz. Wystarczy zejść z progiem do 1 i od razu na nią wskakuje. Czerwona flaga to powtarzalność, czyli to samo ogłoszenie wracające w kółko po kolejnych odmowach.

Model: 1 kluczowe pole. Pod maską to dosłownie kilka linijek. Model to zwykła klasa z jednym naprawdę ważnym polem:

public class JobApplication
{
public string Company { get; set; } = "";
public string Position { get; set; } = "";
public string OfferUrl { get; set; } = "";
public DateOnly AppliedOn { get; set; }
public ApplicationStatus Status { get; set; }
public List<DateOnly> RepostedOn { get; set; } = new(); /* kluczowe! */
public string Notes { get; set; } = "";
}

public enum ApplicationStatus
{
Sent, Interview, Rejected, Offer, Ghosted
}

RepostedOn to lista dat powrotów, a nie jedna data. Właśnie dlatego, że sygnałem jest powtarzalność, a nie pojedynczy powrót ogłoszenia. Z kolei enum ApplicationStatus pokrywa cały cykl życia aplikacji: wysłana (Sent), rozmowa (Interview), odmowa (Rejected), oferta (Offer) albo cisza po drugiej stronie (Ghosted).

Wykrywanie wydmuszek: 1 zapytanie LINQ. Całe "wykrywanie" to ten kawałek kodu:

public static IEnumerable<JobApplication> FindLikelyGhostJobs(
List<JobApplication> applications,
int minReposts = 2)
{
return applications
.Where(a =>
a.Status is ApplicationStatus.Rejected or ApplicationStatus.Ghosted
&& a.RepostedOn.Count >= minReposts)
.OrderByDescending(a => a.RepostedOn.Count);
}

Jeśli firma Cię odrzuciła albo zniknęła, a jej ogłoszenie wróciło co najmniej 2 razy (domyślna wartość minReposts), aplikacja ląduje na liście - posortowanej od najczęściej wracających. Warunek a.Status is ApplicationStatus.Rejected or ApplicationStatus.Ghosted to wzorzec z C# 9, który sprawdza, czy status ma jedną z 2 wartości, a operator && dokleja do niego drugi warunek. Parametr minReposts to dokładnie ten suwak "Próg powrotów" z interfejsu - w Blazorze wystarczy zwykły <input type="range"> powiązany z nim przez @bind.

I uczciwie: to nie żadna magia ani AI. To Ty karmisz aplikację danymi, a ona tylko liczy i pokazuje wzorzec, którego gołym okiem nie wyłapiesz.

Zapis do JSON-a. Skoro nie ma bazy danych, odczyt i zapis to kilka linijek z System.Text.Json, np.:

private static readonly JsonSerializerOptions JsonOptions = new()
{
WriteIndented = true,
Converters = { new JsonStringEnumConverter() }
};

public static List<JobApplication> Load(string path) =>
File.Exists(path)
? JsonSerializer.Deserialize<List<JobApplication>>(File.ReadAllText(path), JsonOptions) ?? new()
: new();

public static void Save(string path, List<JobApplication> applications) =>
File.WriteAllText(path, JsonSerializer.Serialize(applications, JsonOptions));

Dzięki JsonStringEnumConverter statusy trafiają do pliku jako tekst ("Ghosted"), a nie jako liczby, więc plik łatwo przejrzeć i w razie potrzeby poprawić ręcznie. Typ DateOnly System.Text.Json obsługuje bez dodatkowej konfiguracji.

Twarde dane zamiast domysłów. Po 2-3 miesiącach aplikowania masz twarde dane: które firmy realnie rekrutują, a które tylko mielą CV - i do których nie warto już nigdy aplikować. Całość, z zapisem do JSON-a i statystykami, to 1-2 godziny roboty. To przy okazji świetny projekt na start, jeśli uczysz się C#: masz tu LINQ, enumy, serializację, pracę z plikami i Blazora.

Podsumowanie


Zbierzmy najważniejsze wnioski:

• Oferty-wydmuszki to realne, masowe zjawisko. Firmy publikują ogłoszenia z wielu powodów, które nie mają nic wspólnego z zatrudnieniem Ciebie: baza CV, wizerunek, obsadzone stanowisko, badanie rynku, straszak na pracowników, pakiety i automaty.

• Da się je rozpoznać: data ogłoszenia, ogólnikowy opis, brak widełek, liczba otwartych pozycji i LinkedIn. 3 lub więcej punktów z checklisty = szkoda czasu.

• Śledź swoje aplikacje. Najmocniejszym sygnałem jest powtarzalność, a prosty tracker w C# wyłapie ją za Ciebie.

• Odmowa z takiej firmy nie mówi nic o Tobie jako programiście.

Jeśli szukasz pracy w .NET albo po prostu chcesz być na bieżąco z tym, co dzieje się w ekosystemie, mam coś dla Ciebie. Prowadzę społeczność programistów .NET - jest nas już ponad 10 000. Raz w tygodniu wysyłam maila z najważniejszymi newsami ze świata .NET i C# oraz z rzeczami, które realnie warto znać - bez spamu i bez lania wody. Członkowie społeczności dostają też rabaty na moje kursy: zawsze jako pierwsi i zawsze największe.

Jeśli chcesz dołączyć, zostaw swój adres tutaj: modestprogrammer.pl/vip. Powodzenia w szukaniu pracy - i oby trafiały Ci się same prawdziwe rekrutacje :)

Autor artykułu:
Kazimierz Szpin
Kazimierz Szpin
CTO & Founder - FindSolution.pl
Programista C#/.NET. Specjalizuje się w Blazor, ASP.NET Core, ASP.NET MVC, ASP.NET Web API, WPF oraz Windows Forms.
Autor bloga ModestProgrammer.pl
Dodaj komentarz
© Copyright 2026 modestprogrammer.pl | Sztuczna Inteligencja | Regulamin | Polityka prywatności. Design by Kazimierz Szpin. Wszelkie prawa zastrzeżone.