Faits :
A.
A.a. Le 15 juin 1998, X1._ et X2._, en qualité de locataires, et A._ SA, en qualité de bailleresse, ont conclu un contrat de bail portant sur un appartement de 3,5 pièces dans un immeuble sis à..., à Fribourg. Le loyer mensuel brut, fixé à 1'440 fr., incluait un acompte de 210 fr. pour les frais accessoires, aux conditions énoncées ci-dessous (let. Ab).
Par contrat du 8 février 2000, la même bailleresse a loué à W1._ et W2._ un appartement de 4,5 pièces dans un immeuble sis à..., à Fribourg. Le loyer mensuel brut était de 1'715 fr., dont 235 fr. d'acompte pour les frais accessoires (cf. let. Ab).
Le 18 juillet 2001, Y1._ et Y2._ ont pris à bail un appartement de 3,5 pièces dans l'immeuble précité de la bailleresse sis à..., à Fribourg. Le loyer mensuel brut s'élevait à 2'220 fr., dont 220 fr. d'acompte pour les frais accessoires (cf. let. Ab).
Enfin, le 7 juillet 2004, la bailleresse a cédé à Z._ l'usage d'un appartement d'une pièce dans un immeuble sis à..., à Fribourg. Le loyer mensuel brut était de 770 fr., dont 110 fr. d'acompte pour les frais accessoires (infra let. Ab).
A.b. Chacun de ces contrats de bail, édités par la section bernoise de l'Union suisse des fiduciaires immobilières (SVIT), comporte dans la clause générale « 3. Loyer et frais accessoires » une rubrique 3.1 indiquant le loyer net de l'appartement ainsi qu'une rubrique « 3.3 Frais accessoires (acompte) », laquelle comprend en particulier les deux sous-rubriques « 3.3.1 Chauffage et eau chaude selon chiffre 6.1 des Cond. gén. » et « 3.3.2 Frais d'exploitation selon chiffre 6.2 des Cond. gén. » (les sous-rubriques 3.3.3, 3.3.4 et 3.3.5 étant laissées en blanc). Le montant de l'acompte indiqué dans le contrat de bail concerne ces deux sous-rubriques, les frais étant facturés sur la base d'un décompte.
Chaque contrat comporte également une clause selon laquelle le locataire déclare avoir reçu les « Conditions générales 1993 » ainsi que le « règlement de maison-Instructions ». Par leurs signatures, les parties ont déclaré accepter ces documents faisant partie intégrante du bail.
Le chiffre 6.2 des « Conditions générales 1993 du bail à loyer pour habitations », éditées par la section bernoise de l'Union suisse des fiduciaires immobilières (SVIT), dispose ce qui suit, sous le titre « Décompte des frais d'exploitation »:
« Les frais d'exploitation suivants font l'objet du décompte:
- Distribution générale de courant
- Abonnement pour l'entretien des installations mises à disposition des locataires, des appareils tels que l'ascenseur, les extincteurs, les machines à laver, les tumblers, les lave-vaisselle, etc.
- L'entretien du jardin
- Les frais de conciergerie (y compris la contribution de l'employeur à l'AVS/AI/APG/AC, ass.-accidents professionnels, LPP), de nettoyage des escaliers et de déblayage de la neige
- Les taxes et redevances dues pour l'élimination des ordures, l'eau, les eaux usées, les canalisations, la télévision y compris les droits d'auteur, etc.
- Les autres frais d'exploitation peuvent faire l'objet d'un complément aux chiffres 3.3.3, 3.3.4 et 3.3.5 du bail à loyer ou de dispositions particulières
- Les honoraires de gérance
Pour le travail de gérance il sera perçu un honoraire de 3 pourcent des dépenses justifiées (situation 1991). Si les conditions ont changé dans une mesure considérable, il y aura réajustement de cette norme. ».
B.
B.a. Le 12 mars 2013, les locataires W._, X._, Y._ et Z._ ont saisi l'autorité de conciliation de requêtes séparées tendant à ce que la bailleresse soit tenue de leur rembourser les frais d'exploitation payés indûment, soit respectivement 18'291 fr. 05 (W._), 17'754 fr. 85 (X._), 18'308 fr. 20 (Y._) et 7'488 fr. 40 (Z._). Ils ne contestaient en revanche pas la facturation des frais de chauffage et d'eau chaude.
Ensuite de l'échec de la conciliation tentée en commun, les locataires ont actionné la bailleresse par demandes séparées déposées le 12 juillet 2013 devant le Tribunal de l'arrondissement de la Sarine, en reprenant les conclusions prises devant l'autorité de conciliation.
La bailleresse a conclu au rejet des demandes.
Les causes ont été jointes et les parties entendues à l'audience du 20 février 2014; à cette occasion, les locataires X._ ont augmenté leurs conclusions à 18'271 fr. 60.
B.b. Par jugement du 31 juillet 2014, le Tribunal d'arrondissement a admis les demandes et astreint la bailleresse à verser respectivement 18'244 fr. 30 aux locataires W._ solidairement entre eux, 18'271 fr. 60 aux locataires X._ solidairement entre eux, 7'338 fr. 95 à la locataire Z._ et 18'308 fr. 20 aux locataires Y._ solidairement entre eux.
B.c. Statuant par arrêt du 24 août 2015, la II e Cour d'appel civil du Tribunal cantonal fribourgeois a rejeté l'appel formé par la bailleresse et confirmé le jugement entrepris.
La cour cantonale a considéré en substance, à l'instar du Tribunal d'arrondissement, que les frais d'exploitation à la charge des locataires n'étaient pas détaillés dans le corps même des contrats de bail, qui renvoyaient à des conditions générales. L'art. 6.2 desdites conditions s'apparentait à un catalogue standardisé des frais susceptibles d'être mis à la charge des locataires, sans réelle adaptation aux biens immobiliers concernés; il ne pouvait être considéré comme une concrétisation des frais mis à la charge des locataires en fonction des appartements loués. Dès lors, le simple renvoi à cette disposition ne répondait pas à l'exigence d'une convention spéciale au sens de l'<ref-law>.
C.
La défenderesse a interjeté un recours en matière civile au Tribunal fédéral, en concluant principalement au rejet intégral des demandes, subsidiairement à l'annulation de l'arrêt entrepris, la cause étant renvoyée aux instances inférieures pour nouvelle décision dans le sens des considérants. Elle a en outre requis l'octroi de l'effet suspensif.
L'autorité intimée a renoncé à se déterminer.
Les demandeurs ont conclu au rejet du recours et de la requête d'effet suspensif.
Par ordonnance du 9 décembre 2015, la Présidente de la I re Cour de droit civil du Tribunal fédéral a rejeté la requête d'effet suspensif.
La défenderesse a déposé une réplique spontanée dans laquelle elle déclare maintenir les conclusions de son recours.
Les demandeurs ont renoncé à dupliquer.

Considérant en droit :
1.
1.1. La partie défenderesse a succombé dans ses conclusions libératoires et dispose ainsi de la qualité pour recourir (<ref-law>) contre un arrêt rendu en matière civile (<ref-law>) par un tribunal supérieur (<ref-law>) dans une affaire pécuniaire dont la valeur litigieuse dépasse largement le seuil de 15'000 fr. requis par l'<ref-law> pour les causes de droit du bail à loyer (cf. <ref-law>). Déposé dans le délai (<ref-law>) et la forme (<ref-law>) prévus par la loi, le présent recours est recevable sur le principe.
1.2. Le recours en matière civile peut être interjeté pour violation du droit fédéral (<ref-law>), y compris le droit constitutionnel (<ref-ruling> consid. 2.1 p. 247). Le Tribunal fédéral applique le droit d'office (<ref-law>). Il n'est pas lié par l'argumentation des parties (<ref-ruling> consid. 1.3 p. 336) et apprécie librement la portée juridique des faits; il s'en tient cependant aux questions juridiques que la partie recourante soulève dans la motivation du recours et ne traite pas celles qui ne sont plus discutées par les parties, sous réserve d'erreurs manifestes (<ref-law>; <ref-ruling> consid. 1.3 p. 584). Le Tribunal fédéral n'examine la violation d'un droit constitutionnel que si le grief a été invoqué et motivé de façon détaillée (<ref-law>; <ref-ruling> consid. 1.4 in fine).
2.
2.1. Le Tribunal fédéral conduit son raisonnement juridique sur la base des faits établis par l'autorité précédente (<ref-law>). A teneur de l'<ref-law>, il ne peut s'en écarter que si les faits ont été établis de façon manifestement inexacte - c'est-à-dire arbitraire (<ref-ruling> consid. 1.5 p. 130) - ou en violation du droit au sens de l'<ref-law>. La partie recourante qui entend s'écarter des constatations de l'autorité précédente doit expliquer de manière circonstanciée en quoi les conditions d'une exception prévue par l'<ref-law> seraient réalisées, faute de quoi il n'est pas possible de tenir compte d'un état de fait qui diverge de celui contenu dans la décision attaquée (cf. <ref-law>; <ref-ruling> consid. 1.2; <ref-ruling> consid. 1.4 et 6.2).
2.2. En l'espèce, la défenderesse reproche à la cour cantonale « une constatation manifestement inexacte/une appréciation arbitraire des faits, une violation des <ref-law> et 18 CO et une interdiction de l'arbitraire (art. 9 Cst. féd.) en ne reconnaissant pas que les parties ont conclu une convention spéciale valable portant sur les frais d'exploitation ».
Bien qu'elle reproche aux juges fribourgeois d'avoir insuffisamment tenu compte des éléments qui permettraient de retenir une interdépendance entre le contrat et ses conditions générales, force est de constater qu'en réalité, la défenderesse ne s'en prend pas à l'état de fait en tant que tel - qui apparaît complet même au regard des griefs formulés -, mais bien plutôt à l'appréciation juridique de ces faits, qui relève du droit et que le Tribunal fédéral revoit librement (cf. consid. 1.2 supra).
3.
Le litige porte sur le point de savoir s'il existe une convention spéciale valable sur les frais d'exploitation à la charge des locataires. La défenderesse reproche à l'autorité précédente de ne pas avoir retenu une telle convention, subsidiairement d'avoir invalidé l'intégralité de la clause relative aux frais d'exploitation alors que seuls certains postes seraient peu clairs; seuls les deuxième et cinquième tirets du chiffre 6.2 des conditions générales ne seraient pas exhaustifs.
3.1. Selon l'<ref-law>, les frais accessoires ne sont à la charge du locataire que si cela a été convenu spécialement. La loi exige donc que les parties en soient convenues d'une manière suffisamment précise, en détaillant les postes effectifs. En concluant le contrat, le locataire doit comprendre facilement quels postes lui seront facturés en plus du loyer. Le renvoi à une annexe standardisée du contrat telle que les « Conditions générales du bail à loyer pour habitations » (« Allgemeine Bedingungen zum Mietvertrag für Wohnräume ») ne suffit pas pour admettre que les parties ont passé une convention spéciale sur le paiement des frais accessoires; en effet, on ne peut exiger du locataire qu'il se fasse une idée des frais accessoires qu'il aura à payer par une consultation attentive des conditions annexées au contrat; il a bien plutôt droit à ne se voir facturer que les frais accessoires clairement et précisément décrits dans le contrat. Les frais énumérés dans des conditions générales peuvent toutefois être facturés au locataire dans la mesure où ils peuvent être considérés comme une concrétisation des frais accessoires déjà attribués au locataire dans le contrat (<ref-ruling> consid. 4.3.1 et les références citées; arrêt 4A_185/2009 du 28 juillet 2009 consid. 2.1 et les arrêts cités).
L'<ref-law> n'exige pas de forme spéciale pour la convention sur les frais accessoires. En conséquence, la validité de la convention ne saurait dépendre du respect de la forme écrite (<ref-law>); l'accord peut donc en principe être conclu par écrit, oralement ou par actes concluants. Toutefois, si le contrat a été conclu par écrit, il faut considérer que les parties ont également déterminé par écrit quels frais accessoires étaient mis à la charge du locataire (<ref-ruling> consid. 4.3.4 et les réf. citées).
3.2. Selon la jurisprudence, l'exigence d'une convention spéciale au sens de l'<ref-law> n'est pas réalisée lorsque le contrat écrit comporte (hormis l'acompte pour le chauffage et les frais de téléréseau) une rubrique intitulée « acompte frais accessoires » qui ne détaille toutefois aucun des postes visés, se contentant de renvoyer aux frais énumérés dans le catalogue des <ref-law> et 25 OLCAP; un tel renvoi ne concrétise pas une énumération déjà entreprise dans le contrat lui-même, quand bien même des photocopies de ces dispositions ont été annexées au contrat. En effet, on ne saurait admettre que des locataires non juristes aient pu facilement se faire une idée des frais accessoires à leur charge, en particulier en raison de l'imbrication des trois textes qu'ils devaient consulter (contrat, loi et ordonnance); le risque de confusion est d'ailleurs encore augmenté par le fait que la définition des frais accessoires de la LCAP ne se superpose pas avec celle des art. 257a et 257b CO; en outre, les frais énumérés aux <ref-law> et 25 OLCAP le sont de manière exemplaire (« en particulier ») et ne représentent ainsi que des catalogues possibles de frais accessoires sur la base desquels les locataires ne peuvent se faire une idée précise, au moment de conclure le bail, des frais qui leur seront concrètement facturés (<ref-ruling> consid. 4.3.2 et 4.3.3).
Dans un arrêt 4A_185/2009 du 28 juillet 2009, le Tribunal fédéral a en revanche retenu l'existence d'une convention spéciale dans le cas suivant: le contrat de bail prévoyait un acompte de 150 fr. pour les frais de chauffage et accessoires. Plus précisément, il contenait sous la rubrique « frais accessoires et d'exploitation mensuels » les postes « chauffage », « eau chaude », « conciergerie » et « radio/TV » sans aucun montant indiqué dans le champ concerné par chaque poste. Figurait toutefois sur une dernière ligne l'indication « acompte chauffage et frais accessoires » avec le montant total de 150 fr. Le contrat renvoyait en outre expressément à des conditions générales pour le contrat de bail à loyer bâlois (édition 1992) ainsi qu'à deux annexes dont une intitulée « Aufstellung der Heiz- und Nebenkosten,... »; celle-ci se présentait sous la forme d'une feuille recto énumérant sous quatorze postes les frais accessoires et de chauffage (consid. 2.2). Le Tribunal fédéral a considéré que la concrétisation des frais accessoires n'avait pas lieu dans les conditions générales, mais dans une annexe spécifique à laquelle le contrat renvoyait expressément; l'exigence de clarté était respectée, les locataires pouvant aisément comprendre quels frais étaient à leur charge, d'autant plus que l'annexe avait le même titre (« Heiz- und Nebenkosten ») que la rubrique contractuelle prévoyant l'acompte pour les frais de chauffage et accessoires (consid. 2.4.1 et 2.4.2). Par ailleurs, le terme « en particulier » utilisé en début de la liste des frais accessoires figurant dans l'annexe n'enlevait pas le caractère contraignant des frais énumérés mais empêchait plutôt que le bailleur puisse en ajouter à ceux énumérés de manière explicite et claire; le fait que certaines positions de la liste aient été biffées montrait que l'énumération des frais accessoires à la charge du locataire avait été spécifiquement adaptée au rapport de bail litigieux; les locataires n'avaient pas à fouiller dans des conditions générales difficilement compréhensibles de plusieurs pages, mais pouvaient aisément comprendre, à la lecture d'une annexe d'une seule page, quels postes pouvaient concrètement être mis à leur charge en tant que frais accessoires (consid. 2.4.3).
3.3.
3.3.1. En l'espèce, on rappelle que chacun des contrats de bail litigieux, édités par l'Union suisse des fiduciaires immobilières (SVIT), comporte dans la clause générale « Loyer et frais accessoires » une rubrique « 3.3 Frais accessoires (acompte) » composée des deux sous-rubriques « 3.3.1 Chauffage et eau chaude selon chiffre 6.1 des Cond. gén. » et « 3.3.2 Frais d'exploitation selon chiffre 6.2 des Cond. gén. ».
Les frais accessoires en question ne sont pas clairement et précisément décrits dans les contrats litigieux, puisqu'il faut se référer aux conditions générales pour comprendre de quels frais il s'agit. Toutefois, la jurisprudence évoquée ci-dessus admet que des frais énumérés dans des conditions générales soient facturés au locataire pour autant qu'ils puissent être considérés comme une concrétisation des frais accessoires déjà attribués au locataire par le contrat. Elle admet aussi qu'il est suffisant de mentionner dans le contrat un acompte pour les « frais de chauffage et accessoires » (« Heiz- und Nebenkosten ») dans la mesure où une annexe jointe, qui porte le même titre (« Aufstellung der Heiz- und Nebenkosten »), détaille les différents frais à la charge du locataire.
3.3.2. Il convient dès lors d'examiner si le renvoi des contrats litigieux au chiffre 6.2 des Conditions générales satisfait aux exigences posées par la jurisprudence, à savoir que le locataire doit pouvoir aisément comprendre quels postes sont concrètement mis à sa charge au titre des frais accessoires, sans avoir à les rechercher attentivement dans une annexe standardisée de plusieurs pages, telle que les « Conditions générales du bail à loyer pour habitations » (« Allgemeine Bedingungen zum Mietvertrag für Wohnräume »), ou dans un catalogue figurant dans des dispositions légales (<ref-law> et 25 OLCAP) dont une photocopie est jointe en annexe au contrat.
En l'espèce, les contrats litigieux renvoient à une disposition précise des conditions générales annexées au contrat, soit le chiffre 6.2 concernant les frais d'exploitation. On peut se demander s'il est véritablement plus difficile pour les locataires de consulter une telle disposition dans des conditions générales annexées au contrat, qui détaille sous un titre facilement compréhensible (« Décompte des frais d'exploitation ») quels frais leur sont imputables, plutôt que de se référer comme dans l'arrêt 4A_185/2009 à une feuille annexée au contrat, énumérant sous un titre similaire (« Aufstellung der Heiz- und Nebenkosten ») un certain nombre de frais dont la liste est plus longue que dans le cas présent.
Cela étant, une différence décisive distingue le présent cas de l'affaire jugée à l'arrêt 4A_185/2009. Dans celle-ci, une annexe spécifique énumérait les frais d'exploitation pouvant être mis à la charge du locataire. L'on pouvait donc considérer qu'il y avait une concrétisation spéciale des frais accessoires déjà attribués au locataire dans le contrat. La cour de céans a du reste souligné au consid. 2.4.3 in fine de cet arrêt que le fait d'avoir biffé certaines positions de la liste attestait d'une adaptation spéciale aux rapports de bail litigieux. En revanche, dans le cas présent, le renvoi pur et simple à des conditions générales préimprimées - quand bien même elles semblent avoir été rédigées pour être utilisées spécifiquement avec le modèle de contrat SVIT remis aux locataires - fait inférer qu'il n'y a eu aucune adaptation spéciale aux rapports de bail litigieux.
3.3.3. Ces considérations conduisent à la conclusion que les frais accessoires n'ont en l'occurrence pas fait l'objet d'une convention spéciale au sens de l'<ref-law>, lequel présuppose que les postes effectifs soient détaillés de manière à ce que le locataire comprenne facilement quels postes lui seront concrètement facturés en plus du loyer. Comme le souligne la cour cantonale, autant il est aisé pour le locataire de comprendre ce que signifie la rubrique intitulée « chauffage et eau chaude », autant la sous-rubrique « frais d'exploitation » est par trop générique pour qu'un non-juriste puisse en saisir les composants. Le locataire doit pouvoir comprendre aisément et précisément, au moment de la conclusion du contrat, quels frais accessoires seront mis à sa charge; tel n'est pas le cas en l'espèce. Ni le contrat, ni une annexe spécifique à celui-ci ne définit les frais d'exploitation imputables au locataire; ce dernier est renvoyé à des conditions générales préimprimées, dont le chiffre 6.2 contient une énumération s'apparentant à un catalogue standardisé des frais susceptibles d'être mis à la charge du locataire, sans aucune adaptation individualisée aux biens immobiliers concernés, comme l'a relevé à juste titre la cour cantonale. L'exigence d'une convention spéciale au sens de l'<ref-law>, telle que définie par la jurisprudence fédérale, n'est donc pas réalisée en l'espèce s'agissant des « frais d'exploitation » évoqués dans la clause 3.3 du contrat de bail, étant précisé que cette conclusion vaut pour l'ensemble des frais d'exploitation énumérés dans les conditions générales.
Pour le surplus, la défenderesse ne conteste pas le détail des montants alloués aux locataires.
4.
Il résulte de ce qui précède que le recours doit être rejeté.
Vu l'issue du recours, les frais de la présente procédure seront mis à la charge de la défenderesse (<ref-law>), qui versera en outre aux demandeurs, créanciers solidaires, une indemnité de 3'500 fr. à titre de dépens (art. 68 al. 1 et 2 LTF).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté.
2.
Les frais judiciaires, arrêtés à 3'000 fr., sont mis à la charge de la défenderesse.
3.
La défenderesse versera aux demandeurs, créanciers solidaires, une indemnité de 3'500 fr. à titre de dépens.
4.
Le présent arrêt est communiqué aux mandataires des parties et à la II e Cour d'appel civil du Tribunal cantonal du canton de Fribourg.
Lausanne, le 4 février 2016
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente: Kiss
La Greffière: Monti